c语言递归求阶乘

递归函数的定义:一个函数在它的函数体内调用它自身称为递归调用,这种函数称为递归函数。递归函数就是反复调用其自己。递归函数要有两要素:1.递归表达式 2.终止条件

先引入一个例子:输入n,求n!。
分析:
n!= 1 * 2 * 3 * … * n
1)一般解法:

#include"stdio.h"
int main()
{
    int n, i;
    double s = 1;
    scanf("%d", &n);
    for(i = 1;i <= n;i++)
    {
        s *= i;
    }
    printf("%lf", s);
    return 0;
}

先分析一下5!:
5!=1 * 2 * 3 * 4 * 5
||
5!=5 * 4 * 3 * 2 * 1
||
5!= 5 * 4! 如果要计算5!先要计算出4!
4!= 4 * 3! 如果要计算4!先要计算出3!
3!= 3 * 2! 如果要计算3!先要计算出2!
2!= 2 * 1! 如果要计算2!先要计算出1!
1!=1 1!就是1
上面从上至下的分析过程称之为递推
上述分析发现我们并没有计算5!的答案,那怎样算出5!的答案?
把分析的过程倒过来:
把1!的结果1代入上一个表达式中执行2 * 1,得到2!的结果2
把2!的结果2代入上一个表达式中执行3 * 2 ,得到3!的结果6
把3!的结果6代入上一个表达式中执行4 * 6,得到4!的结果24
把4!的结果24代入上一个表达式中执行5 * 24,得到5!的结果120
这个过程我们称之为递归
递归算法是一个基础类的算法,也是一个比较容易理解的算法,但是递归的扩展能力是无限的。
我们把上述分析变换成编程语言:
fact(5)=5 * fact(4)
fact(4)=4 * fact(3)
fact(3)=3 * fact(2)
fact(2)=2 * fact(1)
fact(1)=1
归纳出来就是:
fact(n)=n*fact(n-1) 如果要执行该操作必须满足条件(递归算法表达式)
fact(1)=1 如果要执行该操作必须满足条件(终结条件)
2)解法:

#include"stdio.h"
double fact(double n)
{
     double s;
    if(n >= 2)
    {
        s = n*fact(n-1);
    }
    else if(n ==1)
    {
        s = 1;
    }
    return s;//不输出因为每次计算的fact结果是用作其他数值的计算所用,另做他用,需要返回值。

}
int main()
{
    double s,n;
    scanf("%lf", &n);
    s = fact(n);
    printf("%lf",s);
    return 0;
}
  • 28
    点赞
  • 102
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值