2014-01-30 109 views
-6
void fun(int n) 
{ 
    if(n > 0) { 
     fun(--n); 
     printf("%d", n); 
     fun(--n); 
    } 
} 

如何評估以下代碼?它給出的輸出爲0 1 2 0請解釋如何評估下面的遞歸代碼?

+1

該代碼什麼都不做,因爲它只是一個函數。函數如何被調用?另外,這功課呢?你試圖理解它嗎? – Njol

+3

查看http://stackoverflow.com/questions/21458724/please-explain-how-the-following-recursive-code-is-evaluated獲取更多信息 –

+3

我很驚訝它運行在所有它缺少的一個} – mikea

回答

1
fun(3) //n=3 
    func(2) // n = 3, (--n) = 2 
     func(1) // n = 2, (--n) = 1 
      func(0) // n = 1, (--n) = 0 
      printf("%d", 0) // n=0 **Got 0 ** 
      func(-1) // n = 0, (--n) = -1 

     printf("%d",1) // n = 1  **Got 0 1** 
     func(0) // n = 1, (--n) = 0 


    printf("%d", 2) // n =2   "Got 0 1 2" 
    func(1) // n = 2, (--n) = 1 
     func(0) // n = 1, (--n) = 0 
     printf("%d", 0) // n=0  ***Got 0 1 2 0* 
     func(-1) // n = 0, (--n) = -1