首页 > 解决方案 > 在c中打印倒计时数字的递归函数

问题描述

我很想编写一个程序,从键盘读取整数 n,并使用递归函数打印 n,n-1,... n。下面的代码有效,但我不完全理解为什么或涉及递归函数的步骤。有人可以解释一下吗?

void countingdown(int n){
    if (n == 1){
        printf("%d\n", n);
        return;
    }
    else {
        printf("%d\n", n);
        countingdown(n - 1);
        return;
    }
}

int main(){
    int n;
    printf("Enter an integer: ");
    scanf("%d", &n);
    countingdown(n);
    printf("\n");
    return 0;
} 

标签: cfunctionrecursion

解决方案


例如,如果用户输入值 3,则会发生以下情况:

  1. 该函数maincountingdown使用参数调用3
  2. 然后该函数countingdown将此参数3与 value进行比较1,并且由于该比较的计算结果为false,因此它将打印该数字3,然后countingdown使用 parameter 调用(即该函数将调用自己)2
  3. 的第二个实例countingdown现在将此参数2与值1进行比较,并且由于该比较的计算结果为,它将打印数字2countingdown使用参数调用1
  4. 这第三个实例countingdown现在将参数1与 value1进行比较,并且由于该比较现在评估为true,它将打印数字1并且不会再次调用自己。

递归函数将参数1视为特殊参数,因为这是它应该中止的值。当它遇到这个值时,它将停止递归调用自己。如果函数没有检查这个特殊值,它将永远继续倒计时,并且还会打印0-1-2等。


推荐阅读