2014-01-25 56 views
0
#include <stdio.h> 

    int main() 
    { 
     reverse(1); 
     return 0; 
    } 

    void reverse(int i) 
    { 
     if (i > 5) 
      exit(0); 

     printf("%d\n", i); 
     return reverse(i++); 
    } 

這怎麼遞歸工作?你能解釋一下遞歸嗎?

當我運行它1被無限打印。我期望的輸出爲12345

+8

'返回反向(+ +1);' – P0W

回答

4

++操作者是變量之後,但它確實是「後增」 oparation,因此,儘管它只是將其丟棄之前遞增i變量,則表達結果是原來價值i,因此函數被調用,每次都相同的值。

+0

我站在糾正。修復了答案。 – Javier

1

您使用i++一個遞增我,但使用它在表達原始值。

int a=0 
int b=a++; // a is 1, b is 0 
int c=++a; // a and c is 2 
int d=a+1; // a is 2 and not changed, d is 3 

當你在做遞歸時,你應該儘量不要改變變量,因爲它是不必要的。

void reverse(int i) 
{ 
    if (i > 5) 
     return;   // instead of exit you could use return. 

    printf("%d\n", i); 
    return reverse(i+1); // changed from i++ to i+1 
} 
1

每次您離開遞歸函數時,i的值將保持爲1,因爲您正在使用後增量運算符。使用第(i + 1),而不是

相關問題