【入门级-算法-3、基础算法:递归法】

递归是一种非常重要的算法思想,它指的是函数调用自身的过程。递归通常包含两个主要部分:基线条件(终止条件)和递归条件(调用自身的条件)。

下面通过例子来理解递归算法:
计算阶乘
阶乘的递归定义:n! = n × (n-1) × … × 1,且 0! = 1

#include <stdio.h>
// 递归计算阶乘
int factorial(int n) {
// 基线条件:当n为0时,返回1
if (n == 0) {
return 1;
}
// 递归条件:n! = n × (n-1)!
else {
return n * factorial(n - 1);
}
}
int main() {
int num = 5;
printf(“%d的阶乘是: %d\n”, num, factorial(num));
return 0;
}

思路:比如我们想求5的阶乘,我们是不知道的,但是如果我能求出4的阶乘,乘以5就可以得到5的阶乘,按照递归的思想,我们就转移到递归条件中,去函数调用自己,将问题转换为去求4的阶乘,一次类推,去求3的阶乘,求2的阶乘,最终求出1的阶乘,而1的阶乘是已知的,程序进入基线条件部分,然后函数层层调用返回,最终实现求出5的阶乘。

递归的优缺点
优点:代码简洁,能清晰表达数学定义
缺点:可能导致栈溢出(递归深度过大时),某些情况下效率较低

使用递归时,一定要确保有明确的基线条件,否则会导致无限递归,最终引发栈溢出错误。对于一些复杂问题,递归可以提供直观的解决方案,但在性能要求较高的场景下,可能需要考虑用迭代替代递归。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

papership

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

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

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

打赏作者

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

抵扣说明:

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

余额充值