三个例子掌握函数递归
创作时间:
作者:
@小白创作中心
三个例子掌握函数递归
引用
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;
}
这个迭代版本的斐波那契数列计算方法,通过循环和变量交换的方式,避免了递归带来的栈溢出风险,同时提高了计算效率。
热门推荐
警醒!AI时代来临,如何提升竞争力,借助AI工具成为「超级个体」?
中年女性在不幸婚姻中的三大改变之道
商朝青铜器的铸造艺术与技术
比 PUA 更可怕!遇到这类人,立刻马上远离!
佛教四大菩萨之一:文殊师利菩萨
涨停股如何买入?
阳台承重一般为多少公斤?了解阳台承重的重要性
高中议论文写作技巧与结构解析
家庭种植、摆放风水植物的意义与作用
宝宝好睡眠始于0-3个月的培养,这12个基础知识,新手父母请收藏
从自卑到全能ACE:(G)I-DLE队长田小娟的励志逆袭史
六大行下调存款利率 人行年底前再降准 内银股全线造好
电脑必装的 7 款硬核二战题材单机 FPS 射击游戏
中美实力对比:中国已今非昔比
如何利用数学史提高课堂教学
职场新人必读:如何打造属于自己的职场沟通力?
春季北海道旅游指南
小儿咳嗽常用中药方
健康科普丨中医特色疗法—拔罐
鲁迅的多篇文章,陆续从语文课本里被下架,这样做有何利弊?
培养现代儿童的批判性思维:基于研究的方法
小个子也能变身女强人!跟着这位博主学穿搭,气场全开毫无幼稚感
遭遇断崖式分手怎么走出来,请学会放下
以托勒密王朝亚历山大里亚为例,浅析其作为文化中心的历史地位
100g生面条和干面条的热量分别是多少?一碗面条就够一天热量了吗
吉他入门必修课:左手按弦与右手拨弦指法详解
吠陀占星学:古老的印度占星术历史和原理、使用教程
冬季麒麟掌多肉养护指南:温度、水分与光照三要素
精益品质管理:提升产品质量的黄金法则与实践之道
监狱医生的职责与挑战