2017-08-03 112 views
-2

簡單遞歸問題的答案很容易預測,但是當它一次涉及多個調用時就會變得困難(這裏e( - n)被稱爲兩次 單塊範圍)。 我的問題是,如何通過創建TREE這種結構如何處理這種遞歸程序

void e(int); 

int main(void) 
{ 
    int a = 3; 
    e(a); 
    putchar('\n'); 
    return 0; 
} 

void e(int n) 
{ 
    if (n > 0) 
    { 
     e(--n); 
     printf("%d ", n); 
     e(--n); 
    } 
} 
+3

這裏最適合用鉛筆和一張紙。或者用你最喜歡的調試器來瀏覽程序也可能有所幫助。 –

回答

0

的。如果你做它用鉛筆在一張紙上,你應該得到這個解決這類節目:

呼叫=> E( 3);

call => e(2);
call => e(1);
call => e(0);
initial printf:0
call => e(-1);
initial printf:1
call => e(0);
initial printf:2
call => e(1);
call => e(0);
initial printf:0
call => e(-1);