递归与迭代的区别:
1、递归基于选择结构,迭代基于循环结构。
2、递归通过反复进行函数调用实现循环,迭代是显示的使用一个循环结构。
3、递归在遇到基线条件时终止,迭代是在循环条件为假时结束。
4、递归是不断缩小问题直至达到基线条件,迭代是不断改变计数器变量,直至循环条件为假。
5、递归要不断执行函数调用机制,产生很大的函数调用开销,每次调用都会创建函数的一个副本;迭代同常发生在函数内部,所以反复执行是的开销可以忽略不计。
//总的来说,迭代就是循环,递归就是不断调用自身。
以下是运用迭代与递归实现的打印从1到N 的程序,浙大数据结构课上老师举的例子,用clock()函数计算函数执行时间,判断递归和迭代的执行效果。
#include<stdio.h>
#include<time.h>
void printN1(int n);
void printN2(int n);
int main(void){
int n;
double duration1,duration2, start1,start2,stop1, stop2;
printf("n=");
scanf_s("%d",&n);
start2 = clock();
printN2(n);
stop2 = clock();
duration2 = (stop2 - start2) / CLK_TCK;
printf("循环实现需要的时间为:%f", duration2);
start1 = clock();
printN1(n);
stop1 = clock();
duration1 = (stop1 - start1) / CLK_TCK;
printf("递归实现需要的时间为:%f", duration1);
return 0;
}
void printN1(int n){
if (n){
printN1(n - 1);
printf("%d\n", n);
}
return;
}
void printN2(int n){
int i;
for (i = 0; i <= n; i++){
printf("%d\n", i);
}
return;
}
//尝试在一个函数中调用两次clock()函数,用不同的stop&start但是结果是时间累加,不知为何,,,单个使用就没有问题,不符合逻辑啊,以后碰到再说。
循环0.015递归0.018