c - 递归手动跟踪

标签 c recursion

我正在学习递归,有时它让我大吃一惊。 我堆放在这段代码上。我不知道它是如何工作的。 请有人解释我的输出。 谢谢。

#include <stdio.h>
#include <stdlib.h>

void sum(int n){

    int i;

    if(n==0)
        return;

    for(i=0; i<3; i++){
        printf(" %d ",n);
        sum(n-1);
    }
    printf("\n");

}


int main()
{
    sum(2);
    return 0;
}

最佳答案

在第一次调用 sum(2) 时,它将进入函数然后检查它是否不是 0 skip 所以进入 for 循环,现在首先进行迭代 print 2 并调用 sum (1) ..就像上面一样..现在 sum (1) 将打印 1 并再次调用 sum(0) 这次输入 if 条件并返回 sum(1)state call now next for interation print current n 即 0 call sum(-1) 并且将打印 -1调用 sum(-2) print -2 ......等等......无限运行时间......这东西太乱了:/

关于c - 递归手动跟踪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41901327/

相关文章:

javascript - 递归 JavaScript 函数正在丢失返回值

algorithm - n个对象的等价性测试

java - 如何用斐波那契计算多米诺骨牌的各种方式?

c# - 加起来等于给定自然数的总和组合

c++ - 用于 C++ 应用程序的 Web 界面

c# - 什么是 __int32?

c - c 中的指针算法和数组边界

c - 为什么 C 不使用特殊的转义字符串终止字符终止字符串?

c - 我的代码在读取和写入设备文件时出了什么问题

java - 如何使用递归计算树中的最高级别?