gpt4 book ai didi

c - 递归阶乘返回语句

转载 作者:太空宇宙 更新时间:2023-11-04 05:47:36 25 4
gpt4 key购买 nike

为什么要用return 1来终止递归函数?是否可以使用任何其他值作为默认值,例如 1。

如果我们返回1作为函数的返回值,那为什么1没有返回给main函数。

 #include<stdio.h>
int fact(int n)
{
if(n>=1)
return (n*fact(n-1));
else
return 1;
}
int main()
{
int a,ans;
scanf("%d",&a);
ans=fact(a);
printf("factorial of %d is %d ",a,ans);
return 0;
}
/*
explanation
fact(4);
if(4>=1) 4*fact(3)
if(3>=1) 4*3*fact(2)
if(2>=1) 4*3*2*fact(1)
if(1>=1) 4*3*2*1*fact(0)
if(0>=1) return 1;

*/

最佳答案

int fact(int n)
{
if (n >= 1)
return n * fact(n-1);
else
return 1;
}

每次调用 fact() 函数时,它都会运行 return n * fact(n-1); 语句或 return 1; 声明但不是两者。

您在 main() 中调用了 fact(4)。这是它的运行方式:

main:
compute fact(4)
fact(4):
| 4 >= 1? Yes!
| compute 4 * fact(3)
| fact(3):
| | 3 >= 1? Yes!
| | compute 3 * fact(2)
| | fact(2):
| | | 2 >= 1? Yes!
| | | compute 2 * fact(1)
| | | fact(1):
| | | | 1 >= 1? Yes!
| | | | compute 1 * fact(0)
| | | | fact(0):
| | | | | 0 >= 1? NO!
| | | | | return 1;
| | | | +--> 1
| | | | fact(0) is 1, return 1 * 1 (--> 1)
| | | +--> 1
| | | fact(1) is 1, return 2 * 1 (--> 2)
| | +--> 2
| | fact(2) is 2, return 3 * 2 (--> 6)
| +--> 6
| fact(5) is 6, return 4 * 6 (--> 24)
+--> 24
fact(4) is 24, assign it to `ans`, print it etc
// end of main

当一个函数使用return 语句时(或者如果未达到return 则在它执行完最后一个语句之后,控制权被传回调用的表达式

关于c - 递归阶乘返回语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56234164/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com