第二道题目:
已知一仅仅青蛙一次能够跳上1级台阶,也能够跳上2级台阶。求该青蛙跳上一个n级台阶一共同拥有多少种跳法。
扩展题:
假设一仅仅青蛙一次能够跳上1级台阶,也能够跳上2级台阶,也能够跳上3级台阶。。。
也可跳上n级台阶。
求该青蛙跳上一个n级台阶一共同拥有多少种跳法。
对于第二道题目。我们能够觉得有一个函数f(),放台阶数是n时,有f(n)种跳法,当台阶数n-1时有f(n-1)种跳法,以此类推;
那么f(n)等于多少呢?青蛙第一次跳有两种可能,要么跳一个台阶,要么跳两个台阶。跳一个台阶后还剩下n-1个台阶,n-1个台阶跳法有f(n-1)种。跳两个台阶后还剩下n-2个台阶,n-2个台阶跳法有f(n-2)种。
所以,f(n)=f(n-1)+f(n-2);
这就是斐波那契数列了。
#include<iostream>
using namespace std;
long long Fibonacci(unsigned int n)
{
int result[] = {0,1};
if (n < 2)
return result[n];
long long One = 1, Two = 0;
long long fibN=0;
for (unsigned int i = 2; i <= n; i++)
{
fibN = One + Two;
Two = One;
One = fibN;
}
return fibN;
}
int main()
{
cout << Fibonacci(10);
return 0;
}
扩展题就简单了
f(n)=f(n-1)+f(n-2)+……….+f(1);
=2[f(n-2)+f(n-3)+……….+f(1)];
=2*2[f(n-3)+f(n-4)+……….+f(1)];
等于2的n-1次方。