斐波那契数列
写入一个函数,输入n,求斐波那契数列的第n项。斐波那契数列定义如下:
如图所示,最简单的方法就是采用递归算法:
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)的通解为:
由f(0)=0; f(1)=1可解得c_1,c_2 最终可得,时间复杂度为: