算法 -- 递归

文章通过一个C语言代码示例解释了如何使用递归函数计算阶乘。递归算法基于函数自身调用来解决问题,当遇到边界条件(如n=0)时返回结果,否则通过递归式(n*fact(n-1))继续计算。这种方法体现了分治策略,将大问题分解为小问题解决,然后合并结果。
摘要由CSDN通过智能技术生成
#include<stdio.h>

int fact(int n);
int main(void)
{
    int n;
    int result = 0;


    scanf("%d", &n);
    result = fact(n);
    printf("%d\n", result);
}
int fact(int n)
{
    if(n == 0)
    {
        return 1;//0的阶乘为1
    } else 
    {
        return n * fact(n - 1);
    }
}

分治思想--将要难以直接求解的较大规模(n)的问题分割成k个更小规模相同的子问题(n/m),对这k个子问题分别求解。如果子问题的规模仍然不够小,则再划分为 k个子问题,如此的进行下去,直到问题规模足够小,很容易求解为止。将求出的小规模的问题的解合并为一个更大规模的问题的解,自底向上逐步求出原来问题的解。

递归算法--直接或间接地调用自身的算法(俗称套娃)

递归函数--用函数自身给出定义的函数成为递归函数,递归函数只有具备边界条件(出口)和递归式,才能在有限次计算后得出结果,上面的代码中:

if(n == 0)--边界条件(出口)

fact(n) = n * fact(n - 1);--递归式

找递归式,由上述程序为例子通过观察我们就可以知道要求n!,则只需要求(n - 1)!,因为 n! = n * (n - 1)!以此类推,求( n - 1)!,只需要求出((n-1)- 1)!,即fact(n)= n * fact(n - 1)(注意,下一个传入的实参,会被fact函数中定义的n接收,红色字体是指main函数定义的n绿色字体的n是指在fact函数定义的n),直到当(传入到fact函数的实参)n = 1时(出口),函数fact开始向上返回结果,返回1!,则可得出2! = 2 * 1!= 2,再将2!返回可得出3! = 3 * 2!= 6,以此类推,最后得出n!= n * (n - 1)!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无极帝国C++工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值