输出从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时,递归消耗的时间比循环要多。

在输入过大时,递归对空间的占用是恐怖的,递归函数用掉了所有能用掉的空间还不够,最后会非正常终止了,也就不能进行正常的打印。

posted @ 2022-02-22 22:31  里列昂遗失的记事本  阅读(452)  评论(0编辑  收藏  举报