剑指Offer_编程题
变态跳台阶
一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。
int jumpFloorII(int number) {
if(number == 1)
return 1;
else{
int f = 1,result = 0;
for(int i=2;i<=number;i++){
result = 2*f;
f = result;
}
return result;
}
}
分析:
斐波那契数列(Fibonacci sequence),又称黄金分割数列;指的是这样一个数列:1、1、2、3、5、8、13、21、34、……在数学上,斐波纳契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)(n>=3,n∈N*).
本题中:n个台阶会有一次n阶的跳法(+1)
斐波拉契数列推广:F(0)=1,F(1)=1,F(2)=1, F(n)=F(n-1)+F(n-2)+F(n-3)+…+F(1)+F(0)
简化:
F(n)=F(n-1)+F(n-2)+F(n-3)+…+F(1)+F(0)
F(n-1)=F(n-2)+F(n-3)+…+F(1)+F(0)
所以:F(n) = 2*F(n-1)