这个数列从第2项开始,每一项都等于前两项之和。
常规解法
long long Fibonacci(unsigned int n)
{
if(n<=0)
return 0;
if(n==1)
return 1;
return Fibonacci(n-1)+Fibonacci(n-2);
}
{
if(n<=0)
return 0;
if(n==1)
return 1;
return Fibonacci(n-1)+Fibonacci(n-2);
}
效率更高的解法
#include<iostream>
using namespace std;
int main()
{
int n;
int pre1=1;
int pre2=2;
int next;
cin>>n;
while(n--){
next=pre1+pre2;
pre1=pre2;
pre2=next;
}
cout<<next<<endl;
system("pause");
return 0;
}
using namespace std;
int main()
{
int n;
int pre1=1;
int pre2=2;
int next;
cin>>n;
while(n--){
next=pre1+pre2;
pre1=pre2;
pre2=next;
}
cout<<next<<endl;
system("pause");
return 0;
}
问题的变种:
问题描述:
一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶,请问这只青蛙跳上n级的台阶总共有多少种跳法?
问题分析:
设青蛙跳上n级台阶的跳法为f(n)种.
设Fibonacci数列的第x项值为fibo(x).
(1)当n=1时,f(n)=1
(2)当n=2时,f(n)=2
(3)当n>2时,分析可知,在跳上第n级台阶前一步,必然是在第(n-1)或(n-2)级台阶,故有f(n) = f(n-1) + f(n-2); 依此类推...
本质上还是斐波那契数列
下面看一个矩形覆盖问题
-
题目描述:
-
我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法?
-
输入:
-
输入可能包含多个测试样例,对于每个测试案例,
输入包括一个整数n(1<=n<=70),其中n为偶数。
-
输出:
-
对应每个测试案例,
输出用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有的方法数。

本质上还是斐波那契数列