递归算法中递是"去"的意思, 归是"回"的意思, 整个递归就是"有去有回"的过程.
什么样的问题要用递归来解决? 一句话: 对于问题N,如果N-1已经解决了,那么N是否很容易解决。
学递归调用要明确以下三点:
1、整个递归的终止条件是什么?
2、应该返回给上一级的的返回值是什么?
3、一级递归要做什么?(重复逻辑)
其实2可以和3合并:
1. 递归终止条件
2. 把问题规模缩小
启发的例子:
下楼拿快递就是个递归过程 :
你在床上葛优躺, 快递到了, 但要自己去自提柜拿, 你依次打开卧室门, 屋门 , 楼门, 快递柜门, 拿到了心仪的快递.(这是"递过程", 没错是快递的递)
取到快递, 你先打开楼门, 再打开屋门, 再打开卧室门, 最后再次回到床上葛优躺. (这是"归过程")
神奇的取快递, 竟然神不知鬼不觉的完成了一次递归算法.
这里面思考下递归三要素:
1、整个递归的终止条件是什么? ----当然是拿到快递(剩下的就是返回卧室)
2、应该返回给上一级的的返回值是什么? ----取快递的状态: 归的过程才会有返回值, 返回值是快递包裹以否已经通过了这一级的门.
3、本级递归要做什么? ----开门
“递过程”是指:递归问题必须可以分解为若干个规模较小,与原问题形式相同的子问题,这些子问题可以用相同的解题思路来解决,就像上面例子中的开门一样;
“归过程”是指 : 这些问题的演化过程是一个从大到小,