算法知识: 三步学会所有递归
算法知识: 三步学会所有递归「递归」在算法初学者眼中总是一个令人头疼的问题但其实,这种可以将一个问题拆解为多个重复子问题的算法只要我们掌握了其中的 “套路” ,便可以游刃有余的解决
「递归」在算法初学者眼中总是一个令人头疼的问题
但其实,这种可以将一个问题拆解为多个重复子问题的算法只要我们掌握了其中的 “套路” ,便可以游刃有余的解决所有递归类问题。下面我们就开始吧~
一、青蛙跳台阶
我们首先以最简单的「青蛙跳」为例子来拆解递归问题
剑指 Offer 10- II. 青蛙跳台阶问题【超级简单】
问题定义:一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
第一步:明确递归关系
当我们确定了一个问题是可以使用递归思想解决的时候,我们一定可以明确其中的递归关系,即该问题的子问题之间存在的函数关系。在本题中,我们要 求解青蛙跳上一个 n 级的台阶总共有多少种跳法;我们知道青蛙一次只可以跳1级或2级的台阶,那么在小蛙跳上第n 级台阶的前一步时,小蛙?一定站在第n-1 级或第n-2 级台阶上。所以如果设「青蛙跳上一个 n 级的台阶」共有 f(n) 种跳法;则我们可以得到其中的函数关系为f(n) = f(n-1) + f(n-2)则可以得到函数
def f(n): return f(n-1) + f(n-2)
第二步:明确递归退出条件
做为一个递归函数,其最容易犯的错误就是一猛子扎进死循环中再也出不来;
为了避免这种情况的发生,设定一个严谨的递归结束条件是十分必要的。
在本题中我们得到「一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶」;
可以知道,当台阶数 n 为 1 时,此时不需要进行求解,可以直接知道小蛙?只有一种跳法,一次就可以跳上去。
当台阶数 n 为 2 时,小蛙?可以 一次跳两个台阶 或 一次跳一个台阶一共跳两次,可以有两种跳法。
则我们可以得到函数停止条件
def f(n): if n == 1: return if n == 2: return 2 return f(n-1) + f(n-2)
第三步:校验整体逻辑
在上述函数中显然,对于 n ,我们只考虑到了n >= 1的情况;
为了题目更严谨(不仅本题,所有题目都要记得最后校验),我们最后补全可能存在的所有情况;
即根据算法题命题,最后必须要考虑到的边界条件。
又因为题目示例中给到:
所以得到最后的函数:
def f(n): if n == 0: return if n == 1: return return f(n-1) + f(n-2)
(当然,该题最好的解法是使用动态规划方法~ 但我们本篇文章着重在于递归思想的拆解,因此暂时不讲这种解法)
想必,前面的内容过于简单
大家都已经跃跃欲试了吧
接下来,我们使用树?的问题来验证这三步方法
首页 下一页 上一页 尾页上一篇:L3到无人驾驶还剩几步?
-
华为5G终于进入欧洲主要国家?意大利有条件允许使用其设备2021-06-02
-
提升字符串格式化效率的小技巧2021-03-05
-
字符串拷贝函数有哪几种方法,哪个效率最高?2021-03-02
-
国内第二款新冠疫苗来了!国家药监局附条件批准科兴中维新冠疫苗注册申请2021-02-07
-
中国第二款新冠疫苗获批附条件上市 未来将为全民免费提供2021-02-07
-
孟晚舟申请变更保释条件被拒:缘由是“担心逃跑”2021-01-30
-
孟晚舟申请变更保释条件被否定2021-01-13
-
人民需要特斯拉,但条件不允许2021-01-07
-
定了!机器人行业“维科杯”评选条件出炉,欢迎企业踊跃报名2020-12-04
-
定了!机器人行业“维科杯”评选条件出炉 欢迎企业踊跃报名2020-12-04
-
四个条件证明中国智能家居将引领全球2020-09-22
-
特殊药物、疫苗储存,智慧医疗冷链显示设备应具备什么条件?2020-08-25
-
江苏省2020年示范智能车间申报条件出炉2020-08-23
-
简析1.3亿元无人驾驶公交系统集采:车联网商用已具备条件2020-04-15
-
1.3亿元无人驾驶公交系统集采:车联网商用已具备条件2020-04-15