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

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

递归的两个基本特征

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

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

如何写递归

第一步:猜想、验证

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

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

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

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

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

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

第三部:组合出完整方法

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

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

你可能感兴趣的:(算法村,算法)