-5

可能重复:
这两个位置有什么区别?

我昨天也问过这个问题,但以前没有得到任何答案。我真的很想逐步了解问题中发生了什么以及该程序中的控制流程。

#include<stdio.h>
rec(int);
main()
{
    int x=5;
    rec(x);
    system("PAUSE");
    return 0;
}
rec(int y)
{    
    if (y>0)
    {
        rec(y-1);
        printf("%d ", y);
    }
    // printf("%d ", y)
}

两个printf语句的输出有何不同?

4

1 回答 1

1

rec 是一个递归函数,如果满足条件,它将调用自己。因此,当从 main (rec(5)) 调用它时,y 大于 0,因此它将调用自身,并将 4 作为参数 (y-1) 传递。一旦该调用完成,它将执行 printf ,但是因为它将 4 传递给它自己并且 4 > 0 为真,它会再次调用自己并传递它 3 。这将一直持续到 0 传递给 rec 。当达到 0 时,不满足条件并停止执行,因此之前的调用(传递 1 时的调用)将执行其 printf,然后之前的调用(y = 2)将执行其 printf,依此类推!所以你的输出将是 1 2 3 4 5

编辑:

我以为你的问题是关于递归,而不是语法

于 2012-09-24T04:04:58.940 回答