2013-04-05 131 views
1

我想了解遞歸。我不明白爲什麼下面這段代碼在無限循環中運行?爲什麼這個函數在無限循環中運行?

void myFunc(int n) 
{ 
    if(n==0) 
     return; 
    else 
    { 
     printf("%d\n",n); 
     myFunc(n--); //if I put n=n-1 before this line then it is running fine and will exit from the function . 
     printf("%d\n",n); 
    } 

} 

int main() 
{ 

    myFunc(4); 
} 

回答

7

--是一個遞減運算符,如您正在使用它,只有生效myFunc被調用的n值後,所以你會用相同的值一遍一遍地呼喚myFunc

使用它作爲預遞減運營商將解決您的特定使用案例:myFunc(--n)將不得不把n=n-1上線之前,類似的效果。

3

因爲調用之後進行遞減。之前沒有。

如果你這樣做myFunc(--n);相反,它會工作

4

N--調用後綴操作,這意味着n的值被傳遞到myFunc的。之後,n的值減1。 調用myFunc( - n)。

3

n--遞減n傳遞給myFunc()n後,所以myFunc正在接收每次調用時間相同n值。

0

N--是postfix運營商。這意味着它將在使用該值之後遞增您正在使用的變量。例如,在表達式x * y--中,編譯器將返回x * y,然後遞減y。

1

n - 和 - n是不同的。 您應該查看C操作員和序列點的解釋。 基本上,N--手段「使用n和在下一序列點遞減它」, 而--n手段「遞減n個第一,然後用它」 ..

相關問題