2015-12-16 19 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返回零 - 哪个乘以任何东西都变为零。