一直以来不太理解“迭代和递归”的区别,最近抽时间看了一下,总算是有点明白了。
本文的重点不在于讲解两者的区别和联系,只是提出一个在学习“迭代和递归”过程中遇到的一个小问题,希望高手指教下。
实验平台:Windows XP
开发环境:VS2008
我是通过两种方法实现"斐波那契数列"来理解“迭代和递归”的。
代码如下:
#include <stdio.h>
#include <time.h>
long fibonacci_recusive(unsigned int n){//递归实现
if(n<3)
return 1;
else
return fibonacci_recusive(n-1)+fibonacci_recusive(n-2);
}
long fibonacci_iterative(unsigned int n){//迭代实现
unsigned int final_result=1;
unsigned int cur_result=1;
unsigned int pre_cur_result=0;
while(n>2){
n--;
pre_cur_result=cur_result;
cur_result=final_result;
final_result=pre_cur_result+cur_result;
}
return final_result;
}
int main(int argc,char *argv[]){
clock_t start_time,end_time;
unsigned int n=10;
unsigned int result1=0,result2=0;
start_time=clock();
result1=fibonacci_recusive(n);
end_time=clock();
printf("time1=%ld\n",end_time-start_time);
start_time=clock();
result2=fibonacci_iterative(n);
end_time=clock();
printf("time2=%ld\n",end_time-start_time);
printf("recusive_result=%d\n",result1);
printf("iterative_result=%d\n",result2);
return 0;
}
书上说:用“迭代”比用“递归”实现“斐波那契数列”有更高的效率,所以我就想通过比较两个实现所消耗的时间来验证一下。
运行结果如下:在主函数
unsigned int result1=0,result2=0;
处插入断点,然后单步运行至
printf("recusive_result=%d\n",result1);
处,此时结果如下:
很是奇怪!运行态和调试态结果不一样,why?
问了师兄说不知道,哪位大牛懂得原因,请讲下。谢了