目录
一.斐波那契有关知识
斐波那契用到的知识也是用分治策略解决的,即用递归和循环的方法。类似于斐波那契的题型有兔子繁衍,青蛙跳台阶,矩形覆盖等问题。
遇到这种大规模问题,需要转换成小规模问题,看成n=1时的结果是怎样的,n=2时结果是怎样的。
二.常见题型
1.斐波那契数列
分析:斐波那契用递推公式:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2) (n>=3)
1.1用递归初步实现(低效)
int fun(int n)
{
if(n==1||n==2)
return 1;
else
return fun(n-1)+fun(n-2);
}
如果用递归实现f(5),则实现过程如上图从上向下递归,则会重复计算很多数字。
该方法的时间复杂度为0(2^n)
空间复杂度为树的高度为S(n)
重复计算使时间复杂度太大,需要降低时间复杂度
1.2用循环实现
int fun(int n)
{
int a=1;
int b=1;
int c=1;
for(int i=3;i<=n;+&