具有重复计算的递归算法效率十分低,采用自底而上的迭代算法效率大大提高!
代码如下:
------------------------------------------------------------------------------------
#include <iostream>
int fib(int n)
{
if (n == 1)
return 1;
if (n == 2)
return 2;
return (fib(n - 1) + fib(n - 2));
}
int main()
{
int n1 = 40;//超过40时,极度耗时!可用封底估算得运行时间!
std::cout << "--------------------采用递归--------------------------" << std::endl;
for (int i = 1; i < n1; i++)
{
std::cout<<i<<":="<<fib(i)<<std::endl;
}
int f = 0, g = 1;
int n = 39;//迭代记忆效率高!
while (0 < n--)
{
g= g+ f;
f= g - f;
}
std::cout << "-----------------------采用迭代记忆---------------------------" << std::endl;
std::cout << "迭代结果:"<<":="<<g << std::endl;
std::cin.get();
return 0;
}
-----------------------------------------------------------------
注意申请的内存空间大小!
递归算法的耗时可用 O(2^n)表示,指数级增长;而迭代为C(n),常数级。