递归算法及经典例题详解

article/2025/10/7 6:08:49

大部分人在学习编程时接触的第一个算法应该就是递归了,递归的思想其实很好理解,就是将一个问题拆分为若干个与本身相似的子问题,通过不断调用自身来求解。

但很多新手在实际操作中却很难正确使用到递归,有时面对问题还会有种无从下手的感觉,在此,我总结了一些解决递归问题的方法和思路,希望对你能有所帮助。

1.什么是递归

递归简单来说就是在运行过程中不断调用自己,直到碰到终止条件,返回结果的过程。

递归可以看作两个过程,分别是递和归。递就是原问题把要计算的结果传给子问题;归则是子问题求出结果后,把结果层层返回原问题的过程。

下面设一个需要经过三次递归的问题,为大家详细看一下递归的过程:
在这里插入图片描述
当然,现实中我们遇到递归问题是不会按照图中一样一步一步想下来,主要还是要掌握递归的思想,找到每个问题中的规律。

2.什么时候使用递归

递归算法无外乎就是以下三点:
1.大问题可以拆分为若干小问题
2.原问题与子问题除数据规模不同,求解思路完全相同
3.存在递归终止条件

而在实际面对递归问题时,我们还需要考虑第四点:当不满足终止条件时,要如何缩小函数值并让其进入下一层循环中

3.递归的实际运用(阶层计算)

了解了大概的思路,现在就要开始实战了。下面我们来看一道经典例题:

求N的阶层。

首先按照思路分析是否可以使用递归算法:

  1. N!可以拆分为(N-1)!*N
  2. (N-1)!与N!只有数字规模不同,求解思路相同
  3. 当N=1时,结果为1,递归终止

满足条件,可以递归:

 public static int Factorial(int num){if(num==1){return num;}return num*Factorial(num-1);}

而最后的return,便是第四步,缩小参数num的值,让递归进入下一层。

一般来说,第四步往往是最难的,需要弄清该如何缩小范围,如何操作返回的数值,这一步只能通过不断地练习提高了(当然如果你知道问题的数学规律也是可以试出来的)。

4.其它递归例题:

一:顺序打印,当输入一个整数时,按顺序依次打印每一位的值

该题可以理解为不断拆分整数的最大位,并将它们一一打印。与求阶层不同的是,该题的递归是在终止条件里进行的。

令num不断除10,最后只剩下最高位时并打印。

而在输出时%10,是因为当最高位打印返回后,继续打印的数不一定是个位数,%10只保留个位。

public static void PrintNumber(int num){if (num>10){PrintNumber(num/10);}System.out.print(num%10+",");}

二:斐波那契数列:有一个数列:1、1、2、3、5、8、13、21、34…,求该数列的第 n 项的值是多少。

有了以上两个例子,这样的递归问题就很好解决了。

首先我们观察斐波那契数列的规律是N=(N-1)+(N-2),要保证返回值不为0,所以有两个终止条件。

public static int Fibonacci(int num){if (num==1||num==2){return 1;}return Fibonacci(num-1)+Fibonacci(num-2);}

之后让我们再来看看递归的应用问题,与数学问题相比,在做应用题前需要先将题转换为数学问题,找到规律后再进行代码编写。

三 :汉诺塔(Tower of Hanoi)源于印度传说中一个古老的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。

汉诺塔问题算是递归算法的经典例题了,很多初学者的入门题就是它。

在刚看到汉诺塔的时候,相信很多人都是一头雾水,不知道如何下手。其实面对应用题的时候,先建立它的模型,弄清题意后,再寻找其中的数学规律,解题思路便会清晰不少。

1.首先,题目的意思就是一个柱子A上有64的按大小顺序放置的圆片,要全部移动到另一根柱子C上,每次只能移动一个,可以借助柱子B,且小的不能在大的下面。求最少的移动次数
在这里插入图片描述

2.然后,寻找其中的数学规律(数学归纳法)。
先让所有圆片从上到下按1到N排序。

当N=1时,只需从A->C,移动1次。
当N=2时,先让1号从A->B,再让2号从A->C,最后让1号从B->C,移动3次。
当N=3时,可以理解为先让1、2号从A->B,再让3号从A->C,最后让1、2号从B->C。因为由N=2可以得知,移动两片需要3次,而A->B,B->C共进行了两次,所以共有6次,再加上3号A->C的过程,要移动7次。
同理,当N=4时,共要移动2×7(N=3的移动次数)+1=15次。

所以,当N=N时,要移动2×(N-1)的移动次数+1次
(其实也可以看做2的N次方-1

至此,得到了该题的规律,代码便好些多了。

public static int TowerOfHanoi(int num){if (num==1){return 1;}return TowerOfHanoi(num-1)*2+1;}

四:青蛙跳台阶问题:一只青蛙一次可以跳1级或2级台阶,求该青蛙跳N级的台阶总共有多少种跳法。

有了汉诺塔的经验,这道题做起来就很顺利了
先分析题意,再总结数学规律(本题题意简单,就直接开始数学归纳了)

当N=1,1种跳法。
当N=2,2种跳法。
当N=3,青蛙第一次跳的时候,它只有两种选择:跳1级,剩两级台阶,即N=2,有2种跳法;跳2级,剩一级台阶,即N=1,1种跳法。 所以,N3的跳法=N2+N1。
所以,N4=N3+N2

其实现在你一定会发现,青蛙跳台阶问题和斐波那契额数列的数学规律是一样的,分析清楚之后,代码也就写出来了:

public static int FrogJumpSteps(int num){if (num==1){return 1;}if (num==2){return 2;}return FrogJumpSteps(num-1)+FrogJumpSteps(num-2);}

5.总结

到此,基本把递归算法的基础为大家讲了一遍。当然,我说的只是最基础的部分,递归算法在之后还有很多变式,如:如何避免重复运算,如何自下而上操作等等。

最后,祝大家在编程的道路上越走越远。
大鹏一日同风起,扶摇直上九万里。


http://chatgpt.dhexx.cn/article/0j1dcsyH.shtml

相关文章

几道经典递归算法案例

一)递归介绍 定义: 1、在函数体中直接或间接的调用自身的一种方法。 2、必须要有边界值,也就是停止的条件。 头递归:函数调用时不是传递本次计算的结果,而是把当前的调用状态传递,相当于要一直记录上一…

【函数递归】简单递归的5个经典例子,你都会吗?

🧸🧸🧸各位巨佬大家好,我是猪皮兄弟🧸🧸🧸 今天和大家谈谈简单递归🥳🥳🥳 🚒什么是递归 递归的定义: 递归是一种解决问题的有效方…

四个超好用的优质资源搜索网站,海量优质资源等你发现!

在网上找资源的时候总找不到满意的优质资源?今天小编把办公室大佬珍藏多年的四个超好用优质资源搜索网站分享给你,只要你想找,没有找不到的资源! 一,学习资料库 学习资料库中有大量的免费学习资料,学习资料…

珍藏多年的技术资源搜索网站——程序员必备

程序员经常需要找一些技术书籍和相关文档,但是通过百度查找往往都是需要各种积分才能够下载,笔者平时的学习中积累几个搜索工具网站,基本上所有需要的技术文档,经典书籍,学习资料,学习视频等等都可以在下列…

在百度上搜不到的资源是在哪找的?就在这些强大的资源搜索网站呀

都说又不懂的问“度娘”最快,但是也有一些东西是在“度娘”哪里也找不到的。那些在百度上搜不到的资源是在哪找的呢?就在这些强大的资源搜索网站呀~ 1.茶杯狐 茶杯狐,它的资源搜索功能很成熟,这里收集了海量的资源可以免费下载&a…

黑科技之资源搜索网站

欢迎加入BIM行业开发交流1群 群号:711844216 一、背景 大家经常会有搜索视频,音乐,PDF,APP等资源的需求,然而通过现有搜索引擎不是很方便找到自己想要的东西,这里笔者推荐几个不错的免费网站,基本上用起来…

超好用的云盘资源搜索网站

超好用的云盘资源搜索网站 云盘资源搜索云云搜索搜百度盘盘搜搜万盘搜索爱挖盘盘搜我的盘 云盘资源搜索 想要的资源轻轻松松一键搞定,让工作生活更轻松。 注*本分享仅供学习参考 云云搜索 http://www.yunyunso.com 搜百度盘 http://www.sobaidupan.com 盘搜…

网盘资源搜索网站

本篇博客总结了百度网盘常用的资源搜索网站。 1.盘搜搜 盘搜搜支持百度云搜索、115网盘、360云盘、华为网盘、新浪微盘等搜索服务,是您工作、学习、娱乐的网盘搜索神器 2.如风搜 如风搜,全网网盘搜索工具。是您工作、学习、娱乐的好助手。找好资源&…

6个超级实用的免费网盘搜索网站分享

因为各种原因,多数网盘搜索网站“寿命”都很短,也有很多百度网盘搜索站点都提高了使用门槛(比如付费才能使用)。 分享几个自己认为搜索的资料蛮全,到现在(2021年)为止还能使用的网盘搜索网站。…

我珍藏很久的网盘资源搜索网站和下载神器

摘要:分享几个网盘资源搜索网站和下载神器。 这是「每周分享」的第 17 期。最近有不少新朋友关注,所在再介绍一下这个栏目,每个周末分享一篇 Python 以外的文章,主题涉及:软件、App、PPT、Ps 等几个方面。往期内容你可…

强烈推荐,7个资源搜索网站,从此告别资源付费

前言 周末软件测试自学群很多小伙伴问我:你有啥好的学习资源或者网站没?分享一下可以吗?虽然在国庆期间我整理过,但是趁着周末又给大家整理了一波,完善了不少学习资源,走起~~ 脚本之家 资源很多&#xf…

12款精品网盘资源搜索网站,只有你想不到没有它搜不到的

目录 1.前言 2.网站介绍 3.使用评价 12款精品网盘资源搜索网站,只有你想不到没有它搜不到的 1.前言 今天呢给大家分享几款网盘资源搜索网站,比如盘搜搜、盘盘搜、茶杯狐等,都是非常老牌的网盘资源搜索网站,里面资源丰富且全…

7个资源丰富到爆的搜索网站,没有你找不到的资源!

闲话就不多说了,直接上干货,希望能够帮助到大家! IMDB IMDB是互联网电影数据库网站。它包含了所有的电影、电视的内容。如果说豆瓣是国内经常使用的,那么在豆瓣上看不到的东西,使用IMDB就可以查到了。可以使用它来查询…

3个超实用的资源搜索网站,有了它们,再也没有你找不到的资源!

还在为找不到自己需要的资源而烦恼?别烦恼啦~快来看看这3个超实用的资源搜索网站,有了它们,再也没有你找不到的资源! 1.BT搜 BT搜,这个网站虽然看起来比较简单,但是却有很多非常实用的资源,没有…

还在用百度找资源?试试这3个顶级资源搜索网站,没有找不到的!

资源搜索是工作和学习的日常,相信很多人都喜欢用百度去搜索,虽然百度很强大,但是毕竟资源有限,今天再给大家分享3个顶级资源搜索网站,视频、音乐、图片等应有尽有,没有你找不到的哦。 1.虫部落 一个解决稀…

使用阿里云开放搜索服务快速搭建资源搜索网站

下面我们就一步一步来搭建这个简单的资源搜索网站 一、搭建前的一些准备和分析 资源搜索网站有如下几个关键点: 1、原始数据 没有个几百万条初始搜索数据,都不好意思和别人说是做资源站的,在这个案例里面,我们采用了simplecd官…

5个在线资源搜索网站,用的人求生欲很强!

分享5个平时经常用的在线资源搜索网站,只有你想不到没有你找不到的资源!一起来了解下吧! 西林街搜索http://www.xilinjie.com/ 强烈推荐的资源搜索网站:视频、文库(文档、古籍、专业书籍、电子书[PDF、ePub、Mobi等格…

5个超厉害的资源搜索网站,每一款都可以让你的资源满满!

生活中我们无时不刻不都要在网站搜索资源,但就是缺少一个趁手的资源搜索网站,如果有一个比较好的资源搜索网站可以帮助我们节省一大半时间!今天小编在这里为大家分享5款超厉害的资源搜索网站,每一款都可以让你的资源丰富精彩&…

7个常用资源搜索网站推荐

说起搜索资源,大家肯定先想到百度,的确“度娘”很万能,能帮我们解决很多问题,但毕竟百度资源有限,用的人多了就造成重复的问题,接下来,小编给大家分享7个顶级资源搜索网站,能满足你很…

推荐3个搜索资源的网站,保存起来,用的时候方便找哦

互联网是一个自由分享的世界,但一旦真想找点资源又不容易找,一方面是现在有违规资源会被封,一方面信息时代信息爆炸,很难快速找到想要的内容。 今天分享3个网站,都可以搜索资源,是资源搜索的入口。 找到了…