Lazy loaded image
Task 7
Words 1092Read Time 3 min
2025-5-29

Part1:

🔹理解题目

理解题目

🔹图示

声明:
图示是为了更好理解题目,所以会避免抽象的数学表达,以举具体例子形式标识。
1. 树状图的每一个分支 表示 binh_chess.possible_moves 返回的list 中每一个元素(move) 。图中此函数用P(x) 标识, 其中x代表moves
2. possible_moves 中的元素均以(单个小写字母) 以及 (下标) 标识。
图:
notion image

🔹解题思路(注意事项)

非递归版本(堆栈)
本题用不到:
**所有结构良好的递归都可以转化为 循环+栈 的形式**
Python本身不会优化尾递归, 不会节省调用栈, 所以跟普通栈一样会溢出。(大一上学期不会)
图示:
notion image
伪代码:
递归版本
为什么会想到递归?
  1. 大问题是否可以分解为小问题,而且大小问题结构相同?
  1. 问题小到什么程度,我可以说做完了?
  1. 经验:存在经典递归结构的树或图(DFS, 八皇后,棋盘搜索)(这些自己搜哈)
  1. (小声bb:一般数增的很快的,就可以考虑了)
递归题目基本步骤?
  1. 确定终止情况(base case)
    1. 对于本题来讲,为depth == 1 还是 depth == 0 的情况?对于base case, 返回什么值?0 / 1 / 20?还是以上都不对?(提示:好好看图吧)
  1. 把大问题转化为小问题。(这是最难的了…初级阶段可以想想n - 1s[1: ] 之类的)
    1. 对于本题来说, 大问题:depth 小问题depth - 1 (图中为横向, 层进式式关系)。 问题中的每种possible_move 用什么方法遍历?(图中为纵向, 并列式关系)
  1. 优化(可选):合并?剪枝?(对时间复杂空间复杂度都很重要)(本题需要吗?)
伪代码:

🔹额外

点一下左边的三角
实际情况中,能不用递归就不用递归。
leetcode 难度选简单, 类型选递归递推,刷。

Part2:

🔹理解题目

📄
Part 2 理解

🔹伪代码

点左边的三角形