永发信息网

c语言递归求阶乘

答案:4  悬赏:60  手机版
解决时间 2021-02-23 15:52
  • 提问者网友:我的未来我做主
  • 2021-02-23 12:45
c语言递归求阶乘
最佳答案
  • 五星知识达人网友:北方的南先生
  • 2021-02-23 13:11
n的阶乘,就是从1开始乘到n,即1*2*3*...*(n-1)*n。
即n!=1*2*3*...*(n-1)*n。
而(n-1)!=1*2*3*...*(n-1)。
所以可以得出,n!=(n-1)! * n。
由这个概念,可以得出递归求阶乘函数fact的算法:
1 如果传入参数为0或1,返回1;
2 对于任意的n,返回n*fact(n-1)。


代码如下:
int fact(int n)
{
    if(n == 0 || n == 1) return 1;
    return n*(fact(n-1));
}
全部回答
  • 1楼网友:街头电车
  • 2021-02-23 16:22
n>1的时候递归下去 如果等于1直接返回1追问调用函数fun,将10传递给函数,在第一个return中不停调用fun求得10*9*8*7*6*5*4*3*2 然后再将1传递给函数fun(),因为不满足n>1,所以执行return 1 语句,我是想问这里的return 1是返回到第一个return语句中还是主函数main?
  • 2楼网友:蓝房子
  • 2021-02-23 15:09
第二个就是主函数啊,它用10调用了fun函数,就是求10的阶乘,输出为10!=3628800。
  • 3楼网友:青尢
  • 2021-02-23 13:35
第一个return求的是n>1时的阶乘,这样一层一层地找下去,处理递归并返回结果。第二个return前面省略了else,也就是当不满足n>1这个条件时执行的,是判断递归的边界,返回的是1的阶乘的答案,如果没有这个return,递归就没有边界,一直进行下去,就会造成栈溢出。
PS:我也是刚学,说的可能不是很好,希望对你有帮助!追问调用函数fun,将10传递给函数,在第一个return中不停调用fun求得10*9*8*7*6*5*4*3*2 然后再将1传递给函数fun(),因为不满足n>1,所以执行return 1 语句,我是想问这里的return 1是返回到第一个return语句中还是主函数main?追答是返回到第一个return语句中,因为它已经处理完了fun(1),所以就往上一层fun(2)了。递归的过程是:fun(1)的值回代给fun(2),fun(2)的值回代给fun(3)……直到求出fun(10)=3628800。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯