当前位置: 首页 > wzjs >正文

建设部二级结构工程师注销网站做网站租用服务器

建设部二级结构工程师注销网站,做网站租用服务器,杭州室内设计公司,房地产网站建设方案书在 C 语言的函数世界里,递归是一个独特且强大的概念。它不仅仅是函数调用自身这么简单,背后还蕴含着丰富的思想和广泛的应用。今天,让我们跟随这份课件,深入探索函数递归的奥秘。 一、递归基础:概念与思想 递归是一种…

    在 C 语言的函数世界里,递归是一个独特且强大的概念。它不仅仅是函数调用自身这么简单,背后还蕴含着丰富的思想和广泛的应用。今天,让我们跟随这份课件,深入探索函数递归的奥秘。

一、递归基础:概念与思想

    递归是一种解决问题的方法,在 C 语言中表现为函数自己调用自己。这一概念乍看有些像循环,但又有着本质的区别。以一个简单的示例来说明:

    这段代码展示了递归的基本形式,但它是一个会导致栈溢出的死递归,因为没有设置终止条件。递归的核心思想是把一个大型复杂问题层层转化为与原问题相似但规模较小的子问题来求解,直到子问题小到可以直接解决,这个过程就像是把大象放进冰箱,分步骤逐步拆解,最终达成目标,也就是所谓的 “大事化小”

二、递归的关键:限制条件

    递归要正常工作,必须满足两个关键限制条件:

    存在终止条件:当满足特定条件时,递归不再继续。这就好比在一条路上设置了终点线,到达终点就停止前进。在代码中,通常表现为一个判断语句,例如在计算阶乘的递归函数中,if(n==0)就是终止条件。

    逐步接近终止条件:每次递归调用后,问题规模应逐渐减小,更接近终止条件。就像跑步比赛,每跑一步都离终点更近一点。在递归函数中,每次调用都要让参数朝着满足终止条件的方向变化,如计算阶乘时,n每次递归都减 1。

三、递归的经典应用

(一)计算 n 的阶乘

    计算 n 的阶乘是递归的经典案例。阶乘的定义是所有小于及等于该数的正整数的积,0 的阶乘为 1,数学公式为n!= n ∗(n −1)!。基于此,我们可以编写如下递归函数:

    这个函数中,当n为 0 时,函数直接返回 1,这是递归的终止点。当n大于 0 时,函数通过不断调用自身,将n逐渐减小,最终完成阶乘的计算。例如计算 5 的阶乘,函数会依次计算5 * 4!4 * 3!3 * 2!2 * 1!,直到 1 的阶乘(即 1),然后逐步返回计算结果。

    运⾏结果(这⾥不考虑n太⼤的情况,n太⼤存在溢出);

(二)顺序打印整数的每一位

    输入一个整数,按顺序打印其每一位,例如输入 1234,输出 1 2 3 4。解决这个问题的关键在于如何拆分整数的每一位。通过%10操作可以得到整数的最低位,再通过/10操作去掉已处理的最低位。利用递归思想,可以将打印一个多位数的问题转化为打印去掉最低位后的数,再打印最低位。代码实现如下:

    在这个函数中,当n是一位数时,直接打印n,这是递归的终止条件。当n超过一位数时,先递归调用Print(n/10)打印除最低位外的其他位,然后再打印最低位n%10

四、递归与迭代的对比

    递归虽然强大,但并非没有缺点。在递归函数调用过程中,每次调用都需要在内存栈区申请一块空间来保存局部变量和参数,这块空间称为函数栈帧。如果递归层次过深,会占用大量栈帧空间,可能导致栈溢出问题。例如在计算斐波那契数时,传统递归方式会出现效率低下的情况。

    相比之下,迭代(通常指循环)在一些场景下更具优势。以计算阶乘为例,迭代实现如下:

     这段代码通过循环从 1 累乘到n,避免了递归调用带来的额外开销,执行效率更高。在实际编程中,我们需要根据具体问题的特点,权衡递归和迭代的优缺点,选择最合适的方法

五、递归的拓展应用

(一)斐波那契数的计算

    斐波那契数列的特点是前两个数为 1,从第三个数开始,每个数都等于前两个数之和。用递归方式计算第 n 个斐波那契数的代码如下:

    然而,当n较大时,如n = 50,使用这种递归方式计算会花费极长的时间,因为递归过程中存在大量重复计算。为了优化,可以采用迭代方式:

迭代方式从前往后依次计算斐波那契数,避免了重复计算,大大提高了效率。

(二)青蛙跳台阶问题

    一只青蛙一次可以跳上 1 级台阶,也可以跳上 2 级台阶,求青蛙跳上 n 级台阶总共有多少种跳法。这是一个可以用递归很好解决的问题。假设跳上n级台阶的跳法数为F(n),则有F(n) = F(n-1) + F(n-2),这与斐波那契数列的递归公式相似。当n为 1 时,只有 1 种跳法;当n为 2 时,有 2 种跳法(一次跳 2 级或分两次每次跳 1 级)。递归实现代码如下:

    同样,为了提高效率,也可以将其转换为迭代实现。

(三)汉诺塔问题

汉诺塔问题是一个古老的益智游戏,有三根柱子 A、B、C,A 柱上有若干个盘子,盘子大小不等,大的在下,小的在上。要求将 A 柱上的盘子借助 B 柱全部移到 C 柱上,每次只能移动一个盘子,且在移动过程中,大盘子不能放在小盘子上面。这个问题可以用递归完美解决。假设要将n个盘子从 A 柱借助 B 柱移到 C 柱,递归思路如下:

  • n - 1个盘子从 A 柱借助 C 柱移到 B 柱。
  • 将第n个盘子从 A 柱移到 C 柱。
  • n - 1个盘子从 B 柱借助 A 柱移到 C 柱。

    递归在这些拓展问题中展现了强大的解题能力,通过巧妙地利用递归的 “大事化小” 思想,将复杂问题简化为可解决的子问题。但在实际应用中,也要注意递归可能带来的性能问题,根据情况选择合适的优化策略或实现方式。 


文章转载自:

http://6KQ2BpUN.kmqms.cn
http://CU3X2Jad.kmqms.cn
http://eBGUTaao.kmqms.cn
http://4QxZafPx.kmqms.cn
http://8o2WL2Bl.kmqms.cn
http://46pcYVa9.kmqms.cn
http://f8dTwHkC.kmqms.cn
http://SNsCECem.kmqms.cn
http://j1VSgLtw.kmqms.cn
http://xzOfEnTd.kmqms.cn
http://SYkXBNOG.kmqms.cn
http://KMDcRYC6.kmqms.cn
http://3d3apVWj.kmqms.cn
http://EJtUoRc4.kmqms.cn
http://pChVYVRy.kmqms.cn
http://Nll5G58l.kmqms.cn
http://GWd4VTxs.kmqms.cn
http://pJ5x7Fhu.kmqms.cn
http://TyDAZDU4.kmqms.cn
http://bkWVRWFA.kmqms.cn
http://l11lPhDl.kmqms.cn
http://tl8r47V6.kmqms.cn
http://cclj6jc4.kmqms.cn
http://alqXZtrn.kmqms.cn
http://FjlittTK.kmqms.cn
http://DqQlOiAs.kmqms.cn
http://WlKxZauq.kmqms.cn
http://UIIpGwqh.kmqms.cn
http://gAwz5wTn.kmqms.cn
http://unriH2Dj.kmqms.cn
http://www.dtcms.com/wzjs/780496.html

相关文章:

  • 成都网站建设新网创想南宁商城网站建设
  • 网站建设设计制作外包旺道网站优化
  • 网站定制开发特点深圳网页制作培训课程价格
  • 局机关门户网站建设情况汇报上海黄浦区网站建设
  • 怎么让付费网站免费网站用什么程序做的
  • 网站该怎么找到网站开发重点难点分析
  • 网站建设365动漫制作技术专业
  • 广州联享品牌网站建设Spring做网站和什么
  • 手机手机网站开发做网站卖广告挣几百万
  • 百度网站html验证公众号网页怎么制作
  • 百度做网站多少钱能做广宁县住房建设局网站
  • 个人 建设图片分享网站网站没有备案信息该怎么做
  • 做程序题的国外网站无锡网络科技有限公司
  • 腾讯网站建设专家gif图片制作器
  • 商务网站建设总结长安公司网站建设
  • 上海高端建站公司在百度怎么推广
  • 聊城网站开发2021年中国关键词
  • 垂直网站内容建设遵义营商环境建设局网站
  • 有没有可以做物理实验的网站肇庆建设局网站
  • 网站优化建设广州找外国男人做老公网站
  • 深圳做分销网站的公司wordpress安装 第二步
  • 开发网站本wordpress慢
  • 铜川网站建设报价广东新闻发布会
  • 域名后缀html是怎样的网站介绍家乡的网站怎么做
  • 西安东郊做网站关键词优化价格
  • 中山蓝图科技网站建设网站 网页
  • 网站下载数据百度做网站好用吗
  • 学校门户网站建设说明创建全国文明城市工作要求
  • 外贸招聘网站免网站域名注册
  • 网站接任务来做wordpress 手机首页