前言
最近看到好多小伙伴都在抱怨不会构造递归函数,尤其是进入了树这一章之后,变得更加蒙圈,我特意前来分享一下我关于递归函数的一些理解。如有补充、纠错,欢迎讨论。
正文
首先要知道一点,任何一个算法,你在构建之前必须要自己有能力跟着这个算法走一遍,比如我给你一组符号aaaaaaaaaaabccd,让你去构造一个哈夫曼树,你自己用纸算不出来,你就不可能写得出递归,所以要先去理解这个算法的过程才能落实到算法的实现。
在确定这个大前提的情况下,我们第一步要进行问题的分割,递归就是将一个大问题分割成无数的小问题去求解,举个简单的例子: 这样一个算式,我们可以清楚地发现,去掉2+和大根号后,剩下部分和整体是相同的,这其实就是一个分割的过程。而求前n个数的和,1+2+3+...+n,我们也可以发现,去掉+n之后,其余的数是求前n-1个数的和。递归问题的分割,无关乎分割部分的顺序,我可以从前往后割,也可以从后往前割,没有关系。
问题的分割结束之后,我们就可以进行递归输入输出变量的确定,这一步很重要。输入和输出要保持高度的一致性,那么以1+2+3+...+n为例,这个示例的特征是n,n是int型的变量,所以输入是int,那么我们分割的小问题是前n-1项的和,返回值也是int