有人可以解释一下为什么这段代码会返回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 :(得分: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)
在上一次迭代中,input
在if
语句中变为零。将您的功能更改为
int factorial(int input)
{
if (input > 0)
{
return (input) * factorial(input-1);
}
return 1;
}