输出从1到N的整数
实现函数PrintN,能顺序打印从1到N的全部正整数
循环写法
void printN_1(int N) {
for (int i = 1; i <= N; i++) {
printf("%d\n", i);
}
return;
}
递归写法
void printN_2(int N) {
if (N) {
printN_2(N - 1);
printf("%d\n", N);
}
return;
}
测试速度
#include <stdio.h>
#include <time.h>
clock_t start, stop;
double duration1;
double duration2;
void printN_1(int N) {
for (int i = 1; i <= N; i++) {
printf("%d\n", i);
}
return;
}
void printN_2(int N) {
if (N) {
printN_2(N - 1);
printf("%d\n", N);
}
return;
}
int main(void) {
int N;
scanf("%d", &N);
start = clock();
printN_1(N);
stop = clock();
duration1 = ((double) (stop - start)) / CLK_TCK;
start = clock();
printN_2(N);
stop = clock();
duration2 = ((double) (stop - start)) / CLK_TCK;
printf("printN_1 use time: %lf s\n", duration1);
printf("printN_2 use time: %lf s\n", duration2);
return 0;
}
运行结果:
在输入为5000时,递归消耗的时间比循环要多。
在输入过大时,递归对空间的占用是恐怖的,递归函数用掉了所有能用掉的空间还不够,最后会非正常终止了,也就不能进行正常的打印。