递归如何在这个简单的例子中起作用?

时间:2012-09-24 03:54:35

标签: c recursion

  

可能重复:
  What is the difference between the two locations?

  

我昨天也问了这个问题,但之前没有得到任何答案。   我真的想逐步了解问题中正在发生的事情以及该计划中的控制流程。

#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语句中的输出有何不同?

1 个答案:

答案 0 :(得分:1)

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

编辑:

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