递归的方法定义: F0=0,
F1=1,
Fn=F(n-1)+F(n-2)(n>=2,n∈N*)
1、1、2、3、5、8、13、21、……
所谓Fibonacci数列是指这样一种数列,它的前两项均为1,从第三项开始各项均为前两项之和。用数学公式表示出来就是:
1 (n=1,2)
fib(n)= fib(n-1)+fib(n-2) (n > 2 )
1.递归法
这种方法的优点是简洁和容易理解,缺点是时间复杂度太大,随着n的增大,运算时间将会急剧增加。因此在很多场合这种方法是不可取的。
使用这种方法的关键代码是:
int fib(int n)
{
if(n == 1|| n== 2)
{
return 1;
}
else
{
return fib(n - 1) + fib(n - 2);
}
}
2.迭代法
这种方法相对于递归法来说在时间复杂度上减小了不少,但代码相对就要复杂些了。它的思想是这样的,假设开始时f0=1,f1=1,
currentFib表示当前斐波那契数,则:
int fib(int n)
{
for(i = 1;i < n;i++)
{
currentFib = f0 + f1;
f0 = f1;
f1 = currentFib;
}
return currentFib;
}
这样迭代结束和currentFib就是fib(n)了。
3.总结
递归法有很多重复运算,而迭代法由于每次都保存了前两个数的值,不存在重复运算,所以效率高!