可能重复:
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.请用上下文解释堆栈的概念。这段代码让我困惑了好几天,我无法真正找到这段代码的答案。
答案 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
的内容。
现在这只是一些纠正的代码。理解递归函数正在做什么的最好方法(在我看来)就是在纸上草拟它。