递归问题(斐波那契数列)

发布于:2023-01-04 ⋅ 阅读:(285) ⋅ 点赞:(0)

递归


前言

递归是Java中常用的方法,有许多问题用常用的方法难以实现,但是使用递归方法就会轻而易举的解决。

一、前言

遇到一些问题并不好解决,但是发现将原问题拆分成其子问题之后,子问题与原问题有相同的解法,等子问题解决之后,原问题就迎刃而解。
在这里插入图片描述

二、递归

一个方法在执行过调用了自身,就称为递归。

递归的特征:自己中包含自己。

递归相当于数学上的”数学归纳法”,有一个其实条件,然后有一个递推公式
例: 求N!
N!=N*(N-1)*(N-2) * …… * 1
当N=1时这个起始条件相当于结束条件
求N!,直接不是很好做,我们可以将N!=>N *(N-1)!
同理求(N-1)!=>(N-1) * (N-2)!
……
如此递归下去直到求1!为止。这个问题就解决了

代码如下(求N!):

    public static int  funcyion(int N){
        if(N==1){
            return 1;
        }
        return N*funcyion(N-1);
    }

注意:
1.每次递归的时候这个方法只执行一部分之后就去执行另一部分。
2.归的时候,会把当前方法剩余部分给执行完。
3.递的次数与归的次数相同。
若N=5时,代码执行如下图在这里插入图片描述

完整代码(求5!):

import java.util.Scanner.*;
public class Main {
    public static int  funcyion(int N){
        if(N==1){
            return 1;
        }
        return N*funcyion(N-1);
    }
    public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int N = sc.nextInt();
            System.out.println(funcyion(N));
    }
}
输入5
输出120

二、斐波那契数列(递归经典问题)

斐波那契数列是一个经典的递归问题
斐波那契数列(Fibonacci sequence),又称黄金分割数列,又称为“兔子数列”,指的是这样一个数列:0、1、1、2、3、5、8、13、21、34、55、89、144、233、377、610、987、1597、2584……在数学上,斐波那契数列以如下被以递推的方法定义:
F(0)=0,F(1)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 2,n ∈ N*)

1.递归实现

在这里插入图片描述
如此往下递推直到推到终止条件。

2.代码实现

import java.util.Scanner;
public class Main {
    public static int fun(int n)
    {
        if(n==1){
            return 0;
        } else if (n==2) {
            return 1;
        } else{

            return fun(n-1)+fun(n-2);
        }

    }
    public static void main(String[] args) {
            Scanner sc = new Scanner(System.in);
            int N = sc.nextInt();
            System.out.println(fun(N));
    }
}

总结

递归方法在编程过程中会让问题变的简单易懂,让原本困难的题迎刃而解,为了更加深刻的理解还应该多练习才行,希望对大家有所帮助。

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到