三个例子掌握函数递归
创作时间:
作者:
@小白创作中心
三个例子掌握函数递归
引用
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;
}
这个迭代版本的斐波那契数列计算方法,通过循环和变量交换的方式,避免了递归带来的栈溢出风险,同时提高了计算效率。
热门推荐
牛奶瓶也能健身?5种自制器材让居家锻炼更省钱
湖北自驾之旅:潜江至恩施全程攻略
电路原理基础:从概念到应用的完整指南
插座上的L和N:火线零线如何保障用电安全
装修插座别再“踩坑”!7个常见错误要当心
唐嫣、倪妮、森绘梨佳的妆都是他们画的,怪不得像“发光肌”

分析了数百位现象级达人,我们找到了美妆赛道的3大趋势
Science:Notch信号调控肺泡再生,为肺损伤治疗提供新思路
新手司机驾驶技术提升全攻略:理论学习+六大软肋突破
首位AI助理爱芒的出现,是综艺与AI创新融合的新风向?
快快网络教你搞定《我的世界》服务器卡顿
梁启超后人过得怎样?一门三院士,九子皆才俊
买的车位还要交小区停车费用吗
车位管理费包括哪些服务项目
车位管理费不交就不能停车吗?一文详解车位管理相关法律问题
书香门第的荣耀:一组梁启超家族老照片
“一门三院士,九子皆才俊”,梁启超的子女为何个个优秀?
广东春秋游:气候宜人,活动多样
宁波赏杜鹃攻略:金峨山堵车,炮台岗清幽,影潭山惊艳
北部湾港:中国-东盟贸易枢纽的崛起与机遇
协商、调解还是诉讼?医疗纠纷处理途径指南
个人理财必修课:13个实用货币管理技巧详解
春节催收电话增多,专家支招:主动应对化解债务危机
济宁运河创新游览模式,日赏古迹夜观灯
济宁河道总督署遗址公园开放,六百年运河文化焕发新生
AI赋能内河航运,济宁智慧物流平台覆盖290个港口
周汤豪演唱意外后台急救!脚踝扭伤你还在冰敷?急性期5招正确应对减少肿胀
如何科学选择补钙产品?以步长碳酸钙咀嚼片为例
OCR技术助力医疗智能化:从手写识别到效率提升
深度学习让手写汉字识别飞速进化