递归之斐波那契数列

155 阅读1分钟

斐波那契数列

写入一个函数,输入n,求斐波那契数列的第n项。斐波那契数列定义如下:

2a76691a094a4d24942362bd75356fc.jpg

如图所示,最简单的方法就是采用递归算法:

private static int Fibonacci(int num) {
    if (num==0){
        return 0;
    }else if (num==1){
        return 1;
    }else {
       return Fibonacci(num-2)+Fibonacci(num-1);
    }
}

之后在main方法中调用就可以了

public static void main(String[] args) {
    //定义一个斐波那契数列方法,采用递归实现
    System.out.println(Fibonacci(45));
}

但是这种方法有利有弊,优点是代码简单好理解,但是执行效率比较低:

时间复杂度指数级,他的递归通项公式可以转换为一个齐次二阶常系数差分方程:

设f(n)为参数为n时的时间复杂度,很明显:f(n)=f(n-1)+f(n-2) ,且f(0)=0; f(1)=1; 特征方程为:x^2-x-1=0    得 x=(1±√5)/2    因而f(n)的通解为:

Snipaste_2022-08-06_10-28-57.png

由f(0)=0; f(1)=1可解得c_1,c_2 最终可得,时间复杂度为:

Snipaste_2022-08-06_10-29-04.png