2015-12-16 50 views
-2

有人可以解釋我爲什麼這段代碼返回0嗎?爲什麼遞歸函數0的輸出?

#include <stdio.h> 
int factorial(int input) 
{ 
    if (input > 0) 
    { 
     input--; 
     return input * factorial(input); 
    } 
    return 1; 
} 
int main() 
{ 
    printf("%d", factorial(20)); 

    return 0; 
} 
+0

請注意,您需要'int64_t'來保存20的值! –

回答

7

對於最後入境迭代,在你的代碼,當input是1,執行

if (input > 0) 
    { 
    input--; // see here, 1 goes to 0..... 
    return input * factorial(input); 
    } 

基本上給你

return 0 * factorial (0); 

最終以使整個返回值爲0.

2

在最後一次迭代input成爲if語句中爲零。你的函數改爲

int factorial(int input) 
{ 
    if (input > 0) 
    { 
     return (input) * factorial(input-1); 
    } 
    return 1; 
} 
3

讓我們簡化您的問題並找到factorial(2)

input=2; 

(input--)後,input == 1

return 1*factorial(1) 

現在,當factorial(1)被調用。

input=1; 

做完之後input--,input == 0;

return 0*factorial(0) 

因此無論如何,階乘0返回零 - 哪個乘以任何東西都變爲零。