以求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;
}
效率差别可见一般!!