有人可以帮助我了解此程序吗?

时间:2018-07-05 08:32:42

标签: c recursion

这是我在C中的程序。

f(int n){
    if(!n){
        return 0;
    }
    printf("%d", f(--n));
    printf("*");
    return (n+1);
}

int main()
{
    f(3);
    return 0;
}

并打印:

  

0 * 1 * 2 *

现在我看不到为什么它先进入printf并掉入(--n) 但直到达到0才打印任何内容

3 个答案:

答案 0 :(得分:8)

一张图片值一千字。

  • 实心箭头=函数调用

  • 虚线箭头=函数返回。

enter image description here

答案 1 :(得分:1)

直到它达到0为止,它不会打印任何内容,因为在printf中首先执行f(--n)以计算结果。这将导致该函数递归地执行直到达到0。然后返回上一级的值并开始打印结果0*1*2

答案 2 :(得分:1)

使用此程序,您将具有以下流程:

f(3) -> call f(2)
f(2) -> call f(1)
f(1) -> call f(0)
f(0) -> return 0

f(1) -> print(0) print(*) and return 0+1
f(2) -> print(1) print(*) and return 1+1
f(3) -> print(2) print(*) and return 2+1

main

哪个将打印0 * 1 * 2 *