三个例子掌握函数递归
创作时间:
作者:
@小白创作中心
三个例子掌握函数递归
引用
CSDN
1.
https://blog.csdn.net/2401_89044302/article/details/145739330
递归是编程中一种重要的算法思想,它通过将问题分解为更小的子问题来解决问题。本文通过三个具体的代码实例,帮助读者掌握函数递归的概念、实现方式以及适用场景。
递归 —> 大事化小
1.递归思想
递归是将问题转化为相似的较小问题,递推即递推回归。在C语言函数中可体现为函数调用函数自己。
2.函数的递归调用形式
if(递归终止条件成立) //在逐渐调用中接近终止条件
return 递归公式初值;
else
return 递归函数调用对应结果值;
3.简单函数递归实例
a.顺序打印数字的每一位
输入 6543
输出 6 5 4 3
void Print(int n)
{
if (n / 10 != 0)//递归结束条件
Print(n/10);
printf("%d ", n % 10);
}
这个函数通过递归调用自身,每次去掉数字的最后一位,直到数字只剩一位为止。然后在回溯的过程中,依次打印每一位数字。
b.计算阶乘
输入 5
输出 120
int Fit(int n)
{
if (n == 1)//递归结束条件
return 1;
else
return n * Fit(n - 1);
}
这个函数通过递归调用自身,每次将问题规模减小1,直到n等于1时返回1。然后在回溯的过程中,依次计算阶乘的值。
4.递归的适用情况
每次递归调用时占用内存空间,当递归层数过多时浪费栈帧过多且效率过低,也可能造成栈溢出。
例如计算第n个斐波那契数时:
int Fib(int n)
{
if (n <= 2)
return 1;
else
return Fib(n - 1) + Fib(n - 2);
}
递归层数过多会造成栈溢出。解决使用递归调用层数少的问题时是使用递归的合适情形。反之可以选择运行成本较低效率较高的 迭代(通常是循环)。
在上例的体现为:
int Fib(int n)
{
int a=1, b=1, c=1, i;
for (i =3; i <= n; i++)
{
c = a + b;
a = b;
b = c;
}
return c;
}
这个迭代版本的斐波那契数列计算方法,通过循环和变量交换的方式,避免了递归带来的栈溢出风险,同时提高了计算效率。
热门推荐
增强现实二维码:增强AR交互指南
广深佛莞惠中上榜!中国百强产业集群出炉,广东入选12个排前三
考研b区有哪些学校?国家线有优势,适合分数稍低的考生
留学乌克兰签证材料准备与流程
韩国为何选择“韩”作为国号?一文读懂其历史渊源
年中盘点|2024年上半年,广电5G网络、应用、终端进展一览
高考最难省,狂揽985!
报警后多久可以知道是否立案
闲鱼到付怎么操作?流程有哪些?
猪场五大常见问题及解决方案:从僵猪到奶胖子
出口跨境电商的合规之路 | “出海”早知道③
离职两年发现公积金未缴存?HR系统专家教你三步追回合法权益
什么情况下微信会被冻结
慢性化脓性骨髓炎特征性X线表现及临床症状
赡养费最低标准及申请流程详解
25万人排队买特朗普"金卡",美智库警告投资者或成"冤大头"
安全生产常识大全,条条有用!
死刑执行: 社会争议与法律伦理探讨
血糖高可以吃金桔吗?医生的专业解答来了
多传感器融合技术简介
牙齿矫正后保持器佩戴时间及重要性,不戴保持器牙齿容易反复吗?
间谍过家家人物介绍,间谍过家家角色盘点:人物简介大揭秘
研究证实:荆防颗粒可通过调节免疫细胞和细胞因子增强免疫力
买卖合同补充协议的法律效力及补偿标准详解
对比分子束外延(MBE)与金属有机化学气相外延(MOCVD)技术
培养孩子耐心与专注力,解锁成长“直通车”的密码之旅
4部电影,票房接近1.3亿,力压谢苗,安志杰已经成为“网大一哥”
驾驶证损坏后怎样进行规范补办?补办过程中需要注意什么?
纸贵洛城 | 不应惊讶湖人现阶段的成功,他们真能踏入争冠行列
血糖高可以吃金桔吗?医生的权威解答来了