2017-04-22 127 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