为什么递归函数的输出为0?

时间:2015-12-16 21:48:05

标签: c recursion

有人可以解释一下为什么这段代码会返回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;
}

3 个答案:

答案 0 :(得分:7)

对于最后一次入站迭代,在代码中,当input为1时,执行

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

基本上给你

  return 0 * factorial (0);

最终将整个返回值设为0。

答案 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返回零 - 乘以任何东西,变为零。

答案 2 :(得分:2)

在上一次迭代中,inputif语句中变为零。将您的功能更改为

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