题目:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙上一次n级的台阶总共有多少种跳法?
分析:首先考虑最简单的额情况。如果只有1级台阶,那显然只有一种跳法;如果有2级台阶,那就有两种跳法;跳一级再跳一级;一次性跳到第2级;
接下来讨论一般情况,把n级台阶时的跳法看成是n的函数;记作f(n)。当n > 2时,第一次跳的时候有两种不同的选择:一是第一次只跳1级,此时跳法数目等于后面剩下的n-1级台阶的数目;即为f(n-1); 另一种选择是第一次跳2级,此时跳法数目等于后面剩下的n-2级数台阶数目,即为f(n-2);因此n级台阶的不同跳法的总数f(n)=f(n-1)+f(n-2).
分析到这里,不难看出这实际就是斐波那契数列了;
1 long long Fibonacci(unsigned n) 2 { 3 int result[2] = {0, 1}; 4 if(n<2) 5 { 6 return result[n]; 7 } 8 9 long long fibNMinusOne = 0; 10 long long fibNMinusTwo = 1; 11 12 long long fibN = 0; 13 for(unsigned int i=2;i<=n;++i) 14 { 15 fibN = fibNMinusOne + fibNMinusTwo; 16 fibNMinusTwo = fibNMinusOne; 17 fibNMinusOne = fibN; 18 } 19 return fibN; 20 } 21 ~