2017-04-22 130 views
0

我写了下面的代码递归循环跟踪

#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

也许使用调试器 –

回答

1

程序的输出是正确的。你的产量也由这些值的 -

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

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

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

您可以在此看到example