三个例子掌握函数递归
创作时间:
作者:
@小白创作中心
三个例子掌握函数递归
引用
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;
}
这个迭代版本的斐波那契数列计算方法,通过循环和变量交换的方式,避免了递归带来的栈溢出风险,同时提高了计算效率。
热门推荐
12种常见的产品盈利模式(超详细介绍)
大别山自驾游:打卡最美马丁公路!
黄山宏村自驾游:绝美风景在路上!
冬日探秘:黄山宏村自驾游攻略
五条悟之死,《咒术回战》粉丝炸锅!
杭州六大著名博物馆:从历史文化到自然科技的全方位展示
专家推荐:ONS助力老年人康复增重
《家族传奇:马匹养成竞技》评测:一款令人上瘾的赛马经营游戏
茶马古道上的中华马文化传奇
芥川龙之介的异能背后:《文豪野犬》文学探秘
《文豪野犬》十周年:从漫画到文化现象的持续魅力
泽布替尼副作用全解析:从症状到管理,专家建议都在这里
职场人如何优雅应对泽布替尼副作用?
泽布替尼用药期间的饮食注意事项
哈佛蔬菜汤:营养均衡的健康之选
秋冬暖心汤:洋葱土豆胡萝卜汤的多种美味做法
追寻正义:刑事诉讼中的证据链
刑事辩护中的证据链分析
融资融券避坑指南:稳住心态,轻松应对
揭秘二维码背后的黑科技:原昌宏的发明之路
腾弘原和王越的逆袭:二维码改变生活
人工智能在娱乐大型活动中的十大应用场景
玩《黑神话:悟空》后回看《西游记》的新发现!
游戏光影,投影传奇 《黑神话.悟空》与中国传统文化的沉浸式体验
班组长管理能力提升:从理论到实践的系统化培训
班组长如何用管理技巧提升团队幸福感?
班组长管理技能大揭秘:如何成为团队灵魂人物?
管理心理学:班组长的高效管理之道
联合国发起33亿美元募捐,助力乌克兰难民过冬
煮苹果水的简单做法与多种养生搭配功效解析