题目:
应用:
青蛙跳台阶,爬楼梯,小矩形覆盖大矩形……
思路:
1、 递归
2、 迭代代码:
#include <iostream>
using namespace std;
//斐波那契数列
//应用:青蛙跳台阶,爬楼梯,小矩形覆盖大矩形
long long fibonacciRecurisely(int n)
{
if(n == 0 || n == 1)
return n;
return fibonacciRecurisely(n-1) + fibonacciRecurisely(n-2);
}
//何海涛做法
long long Fibonacci(unsigned n)
{
int result[2] = {0,1};
if(n < 2)
return result[n];
long long fibNMinusOne = 0;
long long fibNMinusTwo = 1;
long long fibN = 0;
for(unsigned int i = 2 ; i <= n ; i++)
{
fibN = fibNMinusOne + fibNMinusTwo;
fibNMinusOne = fibNMinusTwo;
fibNMinusTwo = fibN;
}
return fibN;
}
long long fibonacciInteratively(int n)
{
long long pre = 0;
long long result = 1;
if(n <= 1)
return n;
long long tmp = result;
for(int i = 2 ; i <= n ; i++)
{
tmp = result;
result += pre;
pre = tmp;
}
return result;
}
//矩阵方法,不会
int main()
{
int x ;
while(cin>>x)
{
cout<<fibonacciRecurisely(x)<<endl;//当数据很大时,递归速度明显变慢很多
cout<<fibonacciInteratively(x)<<endl;
cout<<Fibonacci(x)<<endl;
}
}