计算递归的空间复杂度时,一般都从栈的角度出发,因为每调用一次函数就会占用栈的一个格子,看调用了几次可以看出空间复杂度是多少
递归的核心思想:把规模大的问题转化为规模小的且逻辑相似的子问题来解决
递归三要素:明白这个递归function的作用是什么;递归终止条件(以及终止之后的处理方法);递归body的逻辑(抽象出一个干净利落的重复逻辑用到子问题以及最终母问题上)
递:将大问题化为小问题,直到无法再细化为止,去解决这个小问题;先写递归body再进行递归操作实在“递”去的过程中解决问题
归:将解决了的小问题一层一层往回返,解决原问题;先进行递归操作再写递归body是在“归”来的过程中解决问题
递归的常见应用场景:
(1). 问题的定义是按递归定义的(Fibonacci函数,阶乘,…);
(2). 问题的解法是递归的(有些问题只能使用递归方法来解决,例如,汉诺塔问题,…);
(3). 数据结构是递归的(链表、树等的操作,包括树的遍历,树的深度,…)。
递归的时间效率和空间效率一般不高
千万不要模拟铺开递归的过程和细节,只需搞清母问题与子问题是怎么联系起来的,中间有何关系,以及抓住函数的输入和输出应该是什么即可;一个巧妙的方法<