递归可以使你的代码简化,便于理解 。
递归简单理解就是一个函数方法在不断调用自己本身,直到满足条件,输出结果,退出递归。
而我们在使用递归的时候,我们起码要思考三个问题:
问题一: 重复(也就是一直重复出现的子问题)。
问题二: 找好重复中变化的变化量(也就是参数)。
问题三:(我认为最重要的一步) 就是找参数变化趋势。(就指的是递归结束的条件,一定要全,不然就可能会出现无限死循环)。
思考完这三个问题,然后再开始着手去写代码测试。(自己动手才是最重要的!!!)
我们可以借经典案列来让我们更加理解递归:
斐波那契数列:
1,1,2,3,5,8,13…
那么我们的思路按着刚刚的几个问题来进行分析:
1.重复 :从第三项开始就等于前两项之和 ,那么 第n个数就等于(n-1)和(n-2)这两项的和。
2.找变化量(参数):可以看出变化量是项数
3.找递归结束的条件: 从中我们可以看出前两项的数值是确定的
所以我们就可以定项数等于 1 或 2 时,应该输出的是1 。
因此,代码实现如下:
int fib ( int n){
if(n==1||n==2){
return 1;
}
return fib(n-1)+fib(n-2);
}
不过,不能仅仅是理解,还需要大量的去运用,去掌握,去熟悉。
私下可以多练习,如:1.循环改成递归 2.找找最经典的递归题做做 3.(最重要的)要经常回顾自己做过的题解,总结规律,找到适合自己的解题思路。