三个例子掌握函数递归
创作时间:
作者:
@小白创作中心
三个例子掌握函数递归
引用
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;
}
这个迭代版本的斐波那契数列计算方法,通过循环和变量交换的方式,避免了递归带来的栈溢出风险,同时提高了计算效率。
热门推荐
青藏铁路安多段专职护路队员:高原“天路”守护者
青藏铁路建成至今已18年,为啥不换国产车头,还在用美国车头?
攀枝花:从大田会议到省级历史文化名城
攀枝花一日游:打卡网红景点
攀西大裂谷:3.7亿年地质变迁的“天然博物馆”
川藏公路上的货车司机:“318路况越来越好了”
秋冬养生,中医推荐的最佳起床时间
早起一小时,抑郁风险降23%!MIT和哈佛研究揭示睡眠与心理健康的关系
专利律师的清晨:早起如何提升工作效率?
如何用线性灯设计出舒适的家居氛围?
江南红石湾亲子游:喀斯特地貌中的奇幻乐园
桐庐必打卡三大自然景观推荐
桐庐自驾游必打卡:天子地生态景区全攻略
从益田影人花园酒店出发,一日游红螺寺的完美攻略
闯红灯被抓拍?电子警卫系统告诉你真相
新能源汽车冬季保养全攻略:让爱车告别“里程焦虑”
新能源车4S店购车攻略:八步轻松搞定!
合肥新能源汽车产业:从“追赶者”到“领跑者”
故宫博物院推荐:捂灰紫砂壶
老厨家锅包肉:跨越百年的哈尔滨味道
探访哈尔滨百年美食街:老松滨饭店的传承与创新
周口特色美食产业助推经济腾飞
玉树去四川黄龙六日游攻略:沿途景点与旅行建议
双十一特价:丽江大理香格里拉6天5晚自由行攻略
济南出发游云南:7天6晚超值省钱攻略
秋游大理:洱海边的浪漫时光
鱼灯璀璨映古今,商丘非遗传千秋
匠心情深鱼灯舞 商丘古韵非遗扬
如何查询被执行人的财产状况?十种实用查询方法全解析
哈尔滨安静街早市:冬日里的美食天堂