我该如何解决以下代码?

时间:2012-09-06 18:19:05

标签: c function recursion operators

  

可能重复:
  What is recursion really and explain the output of this program?
  What is really happening in this code?

我有一个递归函数,我不明白。我甚至不知道代码是否有效:

int count(int x) // suppose x is 3
{
  if(x>0)
  {
    count(--x);
    printf(x);
    count(--x);  // control reaches here or not?
  }
}

这只是伪代码。将初始变量取为3.请用上下文解释堆栈的概念。这段代码让我困惑了好几天,我无法真正找到这段代码的答案。

2 个答案:

答案 0 :(得分:2)

好吧,只是因为我需要唤醒我的大脑: - )

count(3)将进入该功能并致电count(2)(2:nd级别) count(2)将进入该功能并致电count(1)(3:rd级别) count(1)将进入该功能并致电count(0)(第4级) count(0)将进入该函数,但由于x>0为false,因此无法执行任何操作,只返回到x仍然为0的第4级。

4:将输出0,并致电count(-1)(第5级)

count(-1)将进入该函数,但由于x>0为false,因此无法执行任何操作,只返回到x仍然为-1的第4级。
4:th级返回3:rd级别x仍为1。

3:rd级别将输出1并致电count(0)(4级)

count(0)将进入该函数,但由于x>0为false,因此无法执行任何操作并返回3:rd级别x仍为0。登记/> 3:rd级别返回到2:nd级别x仍然是2.

2:nd级别将输出2并致电count(1)(3:rd级别)

count(1)将进入该功能并致电count(0)(第4级) count(0)将进入该函数,但由于x>0为false,因此无法执行任何操作,只返回3:rd级别x仍为0。

3:rd级别将输出0并致电count(-1)(4级)

count(-1)将进入该函数,但由于x>0为false,因此无法执行任何操作并返回3:rd级别x仍然为-1。

3:rd级别返回到2:nd级别x仍为1 2:nd级别返回1:st级别,我们已完成。

输出为0 1 2 0

我建议如果你真的想了解这一点,请用count(4)自己试试。

答案 1 :(得分:0)

此功能根本不会返回任何内容。在过去的几天里,我在这里发布的这个问题有问题。以下是一些带有注释的工作代码,可以帮助您理解:

/*function declaration so that the program can utilize it*/
int count(int x);

/*main routine that calls the function*/
int main(void)
{
    count(3);    //call the function
    return 0;
}      

/*function prototype*/
int count(int x)
{
    if(x > 0)
    {
         printf("%d", x - 1); //print the value of x - 1 to the screen 
         return count(--x);   //Have the function call itself again with a new argument (the value of x after being decremented)
    }
    return x;                 //x is no longer greater than 0 so return it's value
}

请注意在此示例中使用return,并了解return的内容。 现在这只是一些纠正的代码。理解递归函数正在做什么的最好方法(在我看来)就是在纸上草拟它。