递归的思想
递归的基本思想是某个函数直接或者间接地调⽤⾃⾝,这样原问题的求解就转换为了许多性质相同但是规模更⼩的⼦问题。求解时只需要关注如何把原问题划分成符合条件的⼦问题,⽽不需要过分关注这个⼦问题是如何被解决的。
递归有三⼤要素
第⼀要素:明确你这个函数想要⼲什么
对于递归,我觉得很重要的⼀个事就是,这个函数的功能是什么,他要完成什么样的⼀件事,⽽这个,是完全由你⾃⼰来定义的。也就是
说,我们先不管函数⾥⾯的代码什么,⽽是要先明⽩,你这个函数是要⽤来⼲什么。
例如,我定义了⼀个函数
/ /算 n 的阶乘(假设n不为0)
int f(int n){
}
这个函数的功能是算 n 的阶乘。好了,我们已经定义了⼀个函数,并且定义了它的功能是什么,接下来我们看第⼆要素。
第⼆要素:寻找递归结束条件
所谓递归,就是会在函数内部代码中,调⽤这个函数本⾝,所以,我们必须要找出递归的结束条件,不然的话,会⼀直调⽤⾃⼰,进⼊⽆底
洞。也就是说,我们需要找出当参数为啥时,递归结束,之后直接把结果返回,请注意,这个时候我们必须能根据这个参数的值,能够直接
知道函数的结果是什么。
例如,上⾯那个例⼦,当 n = 1 时,那你应该能够直接知道 f(n) 是啥吧?此时,f(1) = 1。完善我们函数内部的代码,把第⼆要素加进代
码⾥⾯,如下