我在下面使用了递归函数的概念,但根据我对这个概念的理解,代码的输出应该是0,但这里的输出是012345的,我不确定它是如何工作的。
有人可以向我解释一下,因为我的大学教授不能这样做。
#include<stdio.h>
#include<conio.h>
int yo(int a)
{
if(a>0)
{
yo(a-1); //using recursion function
}
printf("%d",a); //printing value
}
void main()
{
yo(5);
getch();
}
printf
是在递归调用之后;因此,在最后一个带有参数值0
的yo
调用开始打印之前,调用yo
的 a
-值的"堆栈"为 5,4,3,2,1,0;然后是1,2,...
使用调试器并尝试一下!
首先,当调用函数时,a的值为5,因此该值被存储到堆栈中并检查条件(5>0(,这是真的,所以下次使用值4调用yo((并重复相同的过程,直到a的值变为0。
现在条件为 false (0>0(,因此下一个语句将使用 in 堆栈的值打印,并且在堆栈中值是 pop,就像最后一个先进先出一样,并将打印012345。