题目:一个台阶总共有n 级,如果一次可以跳1 级,也可以跳2 级。求总共有多少总跳法,并分析算法的时间复杂度。
分析:
假设n=1时,只有一种可能,即f(1)=1,n=2,有两种跳法,f(2)=2,n>2时,可从最后结果倒推回去,f(n)的前一步可能是1级,也可能是两级,可倒推回去上一次跳1级,剩余的级数是f(n-1),上一次跳2级,剩余级数是f(n-2);则有f(n)=f(n-1)f(n-2)
得到算法
int junp12(int N)
{
if(N<=0) return -1
if(N=1) return 1;
if(N=2) return 2;
int f1=1,f2=2;
int fi;
for(int i=3,i<=N;i++)
{
fi=f1+f2;
f1=f2;
f2=fi;
}
return fi;
}
总结,遇到数学问题,可先用公式推导,根据公式推导简化问题,另外,在实际代码中,尽量避免使用递归这种效率低下的实现方式