递归循环跟踪

时间:2017-04-22 08:35:43

标签: c recursion

我写了以下代码

#include <stdio.h>
void recurse();
int main()
{
recurse();
return 0;
}
void recurse()
{
    static int n=987654321;
    if(n==0)
        return ;
    printf("%d",n%10);
    n=n/100;
    int a=n;
    recurse();
    if(a!=0)
    printf("%d",a%10);
}

我不明白为什么输出会来135799753? 我认为答案是135799,因为在1357之后打印第一个9后n将变为9,因此n / 100将为零,因此递归功能将返回主要而不打印任何东西。 请纠正我错在哪里。 在此先感谢!!

1 个答案:

答案 0 :(得分:1)

程序输出正确。您的输出也包含这些值 -

if(a!=0)
printf("%d",a%10);

a的值如果不是0,也会打印出来。但是由于递归调用之后的这些语句,值从最后一个打印到第一个。

您认为输出为135799。第二个9a%10的值,但是来自先前递归调用的a%10的值也将被打印,因为这些语句在递归调用结束后执行。

您可以在此example中看到。