#include <iostream>
using namespace std;
int fibI ( int n ) { //计算Fibonacci数列的第n项(迭代版):O(n)
int f = 0, g = 1; //初始化:fib(-1)、fib(0)
while ( 0 < n-- ) { g += f; f = g - f; } //依据原始定义,通过n次加法和减法计算fib(n)
return f;//返回
}
int fibII ( int n ) { //计算Fibonacci数列的第n项(二分递归版):O(2^n)
return ( 2 > n ) ?
n //若到达递归基,直接取值
: fibII ( n - 1 ) + fibII ( n - 2 ); //否则,递归计算前两项,其和即为正解
}
int main( )
{
cout<<fibI(40);
cout<<endl;
cout<<fibII(40);
return 0;
}
102334155
102334155