题目:定义Fibonacci数列如下:
/ 0 n=0
f(n)= 1 n=1
/ f(n-1)+f(n-2) n=2
输入n,用最快的方法求该数列的第n项。
/ 0 n=0
f(n)= 1 n=1
/ f(n-1)+f(n-2) n=2
输入n,用最快的方法求该数列的第n项。
分析:在很多C语言教科书中讲到递归函数的时候,都会用Fibonacci作为例子。
当递归层次较大时,不适合采用递归,可以堆栈溢出,并且浪费控件,应该采用迭代。
1、题目只是求第n项的值,只要求出第n-1和n-2即可。
2、利用迭代不但更新前两个值。
#include <iostream>
using namespace std;
int main()
{
int n = 40;
int m[2] = {0, 1};//初始值
int sum = 0;
for (int i = 2; i <= n; ++i)
{
sum = m[0] + m[1];
m[i%2] = sum;
}
cout<<sum<<endl;
return 0;
}