一、递归
递归:通过函数体来进行的循环
汇编:它没有所谓的循环嵌套这一说,你之前有一段指令写在什么地方,你不断的跳到之前的指令的地方去执行那条指令,这就是递归。
- 从前有个山
- 山里有个庙
- 庙里有个和尚讲故事
- 返回1
二、盗梦空间
- 向下进入不通梦境中;向上又回到原来一层
- 通过声音同步回到上一层
- 每一层的环境和周围的人都是一份拷贝、主角等几个人穿越不通的梦境(发生和携带变化)
计算 n!
n! = 1 * 2 * 3 * ... * n
def Factorial(n):
if n <= 1 :
return 1
return n * Factorial(n - 1)
三、递归-代码模板
- 终结条件(terminator)
- 处理当前层逻辑(current level logic)
- 下探到下一层(drill down)
- 清理当前层(reverse)
C/C++模版:
void recursion(int level, int param) {
// recursion terminator
if (level > MAX_LEVEL) { // 一、递归终结条件
// process result
return ;
}
// process current logic
process(level, param); // 二、处理当前层逻辑
// drill down
recursion(level + 1, param);// 三、下探到下一层
// reverse the current level status if needed // 四、清理当前层
}
Java模版:
// Java
public void recur(int level, int param) {
// terminator
if (level > MAX_LEVEL) {
// process result
return;
}
// process current logic
process(level, param);
// drill down
recur(level: level + 1, newParam);
// restore current status
}
Python模版:
def recursion(level, param1, param2, ...):
# recursion terminator
if level > MAX_LEVEL:
process_result
return
# process logic in current level
process(level, data...)
# drill down
self.recursion(level + 1, p1, ...)
# reverse the current level status if needed
JavaScript 模版:
const recursion = (level, params) =>{
// recursion terminator
if(level > MAX_LEVEL){
process_result
return
}
// process current level
process(level, params)
//drill down
recursion(level+1, params)
//clean current level status if needed
}
四、思维要点
- 不要人肉进行递归(最大误区) 刚开始学,可以把状态树画出来。到后面了直接看函数本身开始写即可。
- 找到最近最简方法,将其拆解成可重复解决的问题(重复子问题)
- 数学归纳法思维。
五、LeetCode 题目
https://leetcode-cn.com/problems/climbing-stairs/
https://leetcode-cn.com/problems/generate-parentheses/
https://leetcode-cn.com/problems/invert-binary-tree/description/
https://leetcode-cn.com/problems/validate-binary-search-tree
https://leetcode-cn.com/problems/maximum-depth-of-binary-tree
https://leetcode-cn.com/problems/minimum-depth-of-binary-tree
https://leetcode-cn.com/problems/serialize-and-deserialize-binary-tree/
https://leetcode-cn.com/problems/lowest-common-ancestor-of-a-binary-tree/
https://leetcode-cn.com/problems/construct-binary-tree-from-preorder-and-inorder-traversal
https://leetcode-cn.com/problems/combinations/
https://leetcode-cn.com/problems/permutations/文章来源:https://www.toymoban.com/news/detail-790433.html
https://leetcode-cn.com/problems/permutations-ii/文章来源地址https://www.toymoban.com/news/detail-790433.html
到了这里,关于递归(Recursion)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!