以求Fibonacci数列为例:
递归就是不断的调用运行时堆栈。
直接写代码:#include <iostream>
#include <windows.h>
using namespace std;
int f(unsigned int n)
{
if(n==2 || n==1) return 1;
if(n>2){
return f(n-1)+f(n-2); //重复的计算f(n)花费了太多的时间。
}
return 0;
}
int f2(unsigned int n)
{
int pre_val=1;
int next_val = 0;
int result = 1;
while(n>2)
{
n--;
next_val = pre_val ;
pre_val = result;
result = pre_val + next_val;
}
return result;
}
int main()
{
unsigned long a = GetTickCount();
printf("%ld\n",a);
printf("%d\n",f(40));
unsigned long b = GetTickCount()-a;
printf("%ld\n",b); //1828毫秒
a = GetTickCount();
printf("%d\n",f2(40));
b = GetTickCount()-a;
printf("%ld\n",b); //0毫秒
system("pause");
return 0;
}
效率差别可见一般!!
优化Fibonacci数列计算效率
通过比较递归和迭代方法实现Fibonacci数列的计算,展示递归方法的高时间消耗,并提出迭代方法作为高效解决方案。
1039

被折叠的 条评论
为什么被折叠?



