If statement 需要了解返回值为0的if条件在使用递归计算函数阶乘时所起的作用

If statement 需要了解返回值为0的if条件在使用递归计算函数阶乘时所起的作用,if-statement,recursion,return,conditional-statements,If Statement,Recursion,Return,Conditional Statements,#包括int事实(int);int main(){ int n,f; printf(“输入要计算其阶乘的数字?”); scanf(“%d”和“&n”); f=事实(n); printf(“阶乘=%d”,f);}int事实(int n){ 如果(n==0) { 返回0; } else如果(n==1) { 返回1; } 其他的 { 返回n*事实(n-1); }} 上面是查找递归的解决方案。我的问题是如果n==0 然后程序返回0,激活记录将 值为0。如果我们把任何东西乘以0,就会得到0,但我是 得到了

#包括int事实(int);int main(){ int n,f; printf(“输入要计算其阶乘的数字?”); scanf(“%d”和“&n”); f=事实(n); printf(“阶乘=%d”,f);}int事实(int n){ 如果(n==0) { 返回0; } else如果(n==1) { 返回1; } 其他的 { 返回n*事实(n-1); }}

上面是查找递归的解决方案。我的问题是如果n==0 然后程序返回0,激活记录将 值为0。如果我们把任何东西乘以0,就会得到0,但我是 得到了预期的结果。如果移除If条件If n==0 保持n==1的条件不变,我得到的结果是 预期。这是怎么回事


看来你的思路是对的,你应该能够自己回答这个问题。你可以试着摆脱零基数的情况。或者打印出函数的参数。稍微偏离主题,但是0!是1,不是0。回到主题,对于任何输入
n>=1
else if
条件(
n==1
)必然发生在
if
条件(
n==0
)之前,因为
n
只递减1。因此,除非你直接调用
fact(0)
,否则你永远不会真正满足
n==0
@NathanHughes在这两种情况下我都得到了答案。但无法理解基本情况1的作用。@Dillon感谢您的解释。它打开了我的眼睛。从不调用事实(0)。在返回1的事实(0)之前调用事实(1),并且没有递归调用。因此,激活记录开始从堆栈中弹出以计算并返回结果。