一图理解递归(算法村第七关青铜挑战)

本文介绍了递归编程的基本特征,强调了确定终止条件的重要性,以及递归的编写步骤——猜想验证、分情况讨论和组合方法。作者提倡在面试中讨论解决方案,避免盲目编写复杂的代码。
摘要由CSDN通过智能技术生成

在这里插入图片描述

递归的两个基本特征

  1. 执行时范围不断缩小,这样才能触底反弹
  2. 终止判断放在递归调用的前面,这个终止条件就是要触的底

先考虑清楚什么情况下终止,并把相关代码写在靠前位置的,之后再考虑递归的逻辑,这样可以降低编写的难度。

如何写递归

第一步:猜想、验证

先猜测出存在递归关系,再选几个较小的值验一下,有必要的话再选择几个比较大的验一下。

例如斐波那契序列1 1 2 3 5 8,…,从n=3开始都满足f(n)= f(n-1) + f(n-2),然后我们再选择某个比较大的n来验证即可。

第二步:分情况讨论,明确终止条件

大部分递归的终止条件不过是n最小开始触底反弹时的几种情况。但有些情况不一定是触底才开始反弹,而是达到某种要求就要停止。

解决这类问题最直接的方式就是枚举,将可能的情况列举一下,再逐步优化。 只有列举清楚了才可能将终止条件写完整。

所以,在面试时千万不要上来就写,而应该先和面试官讨论你的设计方案。不要害怕与面试官讨论!假如有明显的缺陷他甚至会提醒你,这也是一个借力打力的技巧。

第三部:组合出完整方法

将递推公式和终止条件组合起来,变成完整的方法。

递归经常能看到很多骚操作代码,不要迷信这些,先分情况逐个先写出来,之后再看能否精简优化。不要步子太大。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值