2012-09-06 51 views
-3

可能重复:
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作为初始变量。请根据上下文解释堆栈的概念。这段代码让我困惑了好几天,而且我也找不到这个代码的答案。

+7

显然这是一个很大的功课,因为许多新手都在问同样的问题。阅读一本关于递归的好书是最好的建议。在几分钟内向不知名的观众解释是不可能的。 –

+3

请注意,您不会从非void函数返回任何内容。这是未定义的行为。 –

+0

搜索所以递归,并找到一些其他答案给这个确切的问题。有很多好的。如果你还不明白,请参考那些更新你的问题。 – Mike

回答

2

好了,只是因为我需要醒来我的大脑了一下:-)

count(3)将进入功能和呼叫count(2)(2:第二级别)。
count(2)将进入该功能并呼叫count(1)(3:rd级别)。
count(1)将进入功能并呼叫count(0)(4:th级别)。
count(0)将进入功能,但由于x>0是假的,它不会做任何事情,就回到4:日水平,x仍为0

4:个级别将输出0,并调用count(-1) (5个等级)

count(-1)将进入功能,但由于x>0是假的,它不会做任何事情,就回到4:日水平,x仍然是-1。
4:第水平返回到3:RD水平,x仍为1

3:RD水平将输出1并调用count(0)(4:第水平)

count(0)将进入功能,但由于x>0为假,它不会做任何事情,只是返回到3:rd级别,其中x仍然是0.
3:rd级别返回到2:nd级别,其中x仍然是2。

2:第二级将输出2和呼叫count(1)(3:RD水平)

count(1)将进入功能和呼叫count(0)(4:第水平)。
count(0)将进入功能,但由于x>0是假的,它不会做任何事情,只是返回3:RD水平,x仍为0

3:第三级将输出0并调用count(-1)( 4:个级别)

count(-1)将进入功能,但由于x>0是假的,它不会做任何事情,只是返回3:RD水平,x仍然是-1。

3:第三届水平回到2:第二水平,x仍为1
2:第二级恢复到1:ST水平,我们就大功告成了。

输出是0 1 2 0

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

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一样。 现在,这只是一些更正的代码。理解递归函数在做什么(在我看来)最好的方法是将其写在纸上。

+0

这与伪代码不一样。是的,您发布了有效的代码,比Amol Singh的功能更“计数”,但这不是问题。 – stefan

相关问题