在C中使用递归函数,为什么以下程序的输出012345

  • 本文关键字:程序 012345 输出 递归函数 c
  • 更新时间 :
  • 英文 :


我在下面使用了递归函数的概念,但根据我对这个概念的理解,代码的输出应该是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是在递归调用之后;因此,在最后一个带有参数值0yo调用开始打印之前,调用yoa -值的"堆栈"为 5,4,3,2,1,0;然后是1,2,...

使用调试器并尝试一下!

首先,当调用函数时,a的值为5,因此该值被存储到堆栈中并检查条件(5>0(,这是真的,所以下次使用值4调用yo((并重复相同的过程,直到a的值变为0。

现在条件为 false (0>0(,因此下一个语句将使用 in 堆栈的值打印,并且在堆栈中值是 pop,就像最后一个先进先出一样,并将打印012345。

最新更新