Lecture1 笔记
递归
把大问题分解为多个相似的小问题.
电影院问题: 获取人数, 如何获取?
1 | 函数 获取人数: |
汉诺塔问题:
定义一个函数, 移动n个饼. 如果n=1, 直接移动即可. 如果n!=1, 那么对于上面的n-1个饼, 最下面的饼 并不会影响上面n-1个饼的移动. 所以, 可以递归调用此函数, 移动n-1个饼.
1 | 定义函数 移动饼(从哪儿,到哪儿,借助哪儿,饼数量): |
放苹果问题:
定义一个函数用于解决"n个苹果放到m个盘子里"问题.
那么这个问题, 可以分解为以下两种子情况:
- 每一个盘子内都放一个苹果
- 接下来不再对某个盘子放苹果
1 | 定义函数 放苹果(苹果数, 盘子数): |
括号匹配问题:
给出一个括号序列, 判断是否是匹配的括号序列.
先读入字符串, 每次处理一个字符. 如果是左括号, 就入栈. 如果是右括号, 首先判断栈中是否有元素(s.size() > 0), 如果有元素再判断栈顶元素是否是当前右括号对应的左括号. 如果是, 就把左括号出栈. 如果不是, 说明这个括号序列并不美观.