c - 需要递归函数的解决方案

标签 c gcc

#include <stdio.h>

void call(int n )
{
    if ( n > 0 )
    {
        call(--n) ;
        printf("\n%d",n) ;
        call(--n) ;
    }
}

int main(void )
{
    int a = 3 ;
    call(a) ;
    return 0 ;
}

在上面提到的代码中,我很难理解它背后的逻辑。 我得到 0 1 2 0 作为输出。为什么?

最佳答案

call(3)
│ n3=3
│ --n3 (n3=2)
├╴call(2)
│ │ n2=2
│ │ --n2 (n2=1)
│ ├╴call(1)
│ │ │ n1=1
│ │ │ --n1 (n1=0)
│ │ ├╴call(0)
│ │ │ └ return
│ │ │
│ │ │ printf("\n0");           ⇦ 0
│ │ │
│ │ │ --n1 (n1=-1)
│ │ ├╴call(-1)
│ │ │ └ return
│ │ └ return
│ │
│ │ printf("\n1")              ⇦ 1
│ │
│ │ --n2 (n2=0)
│ ├╴call(0)
│ │ └ return
│ └ return
│
│ printf("\n2");               ⇦ 2
│
│ --n3 (n3=1)
├╴call(1)
│ │ n1=1
│ │ --n1 (n2=0)
│ ├╴call(0)
│ │ └ return
│ │
│ │ printf("\n0");             ⇦ 0
│ │
│ │ --n1 (n1=-1)
│ ├╴call(-1)
│ │ └ return
│ └ return
└ return

关于c - 需要递归函数的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13890480/

相关文章:

linux - mips 交叉编译器中的 crt1.o 错误

c - unix管道(|)和我们在c中使用 "pipe(int pipefd[2])"创建的管道一样吗?

c - Arduino:检测 while 循环内按下的按钮

gcc - 在 Ubuntu 64 位上使用 gcc 4.5.2 编译 SUNDANCE 4.73

gcc - GNU C++ 错误消息

gcc - 如何将旧版本的 gcc 安装到当前版本? (以及在哪里可以找到它)

c - 对于 128MB 字符串缓冲区,是否有任何校验和算法仅花费 sha1 时间的 1%?

c++ - Const 变量随 C 中的指针改变

c - 在 C 中返回一组记录

c - O1和Os有什么区别?