先考虑清楚什么情况下终止,并把相关代码写在靠前位置的,之后再考虑递归的逻辑,这样可以降低编写的难度。
先猜测出存在递归关系,再选几个较小的值验一下,有必要的话再选择几个比较大的验一下。
例如斐波那契序列1 1 2 3 5 8,…,从n=3开始都满足f(n)= f(n-1) + f(n-2),然后我们再选择某个比较大的n来验证即可。
大部分递归的终止条件不过是n最小开始触底反弹时的几种情况。但有些情况不一定是触底才开始反弹,而是达到某种要求就要停止。
解决这类问题最直接的方式就是枚举,将可能的情况列举一下,再逐步优化。 只有列举清楚了才可能将终止条件写完整。
所以,在面试时千万不要上来就写,而应该先和面试官讨论你的设计方案。不要害怕与面试官讨论!假如有明显的缺陷他甚至会提醒你,这也是一个借力打力的技巧。
将递推公式和终止条件组合起来,变成完整的方法。
递归经常能看到很多骚操作代码,不要迷信这些,先分情况逐个先写出来,之后再看能否精简优化。不要步子太大。