斐波那契数列定义如下:F(0) = 0, F(1) = 1,F(N) = F(N - 1) + F(N - 2), 其中 N > 1. 求第N个斐波那契数列的值。
如果直接根据斐波那契数列的公式通过递归的方法求第N个数列值,递归的过程中会重复计算前面项的值,算法复杂度较高,而通过分析可以发现,第N项的值为第(N-1)以及第(N-2)项的和,而第(N-1)项是第((N-1)-1)与第((N-1)-2)的和...可以通过循环累加得到第N项的值,每一项都只计算一次,不会造成过高的算法复杂度。
#include<iostream>
#include<ctime>
using namespace std;
int fib1(int n) //递归方法
{
int tmp;
if (n > 1)
{
tmp = fib1(n - 1) + fib1(n - 2);
return tmp;
}
else
{
return n;
}
}
int fib2(int n) //非递归方法
{
int first = 0;
int second = 1;
int sum = 0;
if (n >= 1)
{
for (int i = 0; i < n - 1; i++)
{
sum = first + second;
first = second;
second = sum;
}
return second;
}
else
{
return n;
}
}
void main()
{
int n = 30;
clock_t startTime, endTime;
startTime = clock();
cout << "第一个结果是:" << fib1(n) << ',';
endTime = clock();
cout << "花费时长:" << (endTime - startTime) << "ms" << endl; //单位为毫秒
startTime = clock();
cout << "第二个结果是:" << fib2(n) << ',';
endTime = clock();
cout << "花费时长:" << (endTime - startTime) << "ms" << endl;
}