女孩和机器人一起思考

一起动脑筋 · 先看一个小故事

机器人要办一场积分赛:收集分数、找冠军、打印奖状。女孩把它拆成能单独检查的小任务。

把过程摊开来看

沿着编号看一遍,再用自己的话讲一遍
  1. 收集确认分数合法
  2. 统计找到最高分
  3. 处理并列按规则确定名单
  4. 展示输出名单

拆分让每一步都有明确输入和输出。

子任务合起来必须覆盖原问题,例如“有并列怎么办”不能因为拆成几块就被遗忘。

01为什么要拆问题?

大问题一次想完很困难,但很多大问题由多个简单任务组成。

大问题几个小问题组合答案

02可以按步骤拆

例如“读入成绩并输出最高分学生名字”:

  1. 读入数据
  2. 找最大成绩
  3. 记录对应学生
  4. 输出答案

03可以按子问题拆

递归和动态规划中常见:

当前问题 = 更小子问题 + 当前这一点工作

例如阶乘、区间问题、树结构都经常这样思考。

04可以先解决一个简化版本

如果原题很复杂,可以先问:

  • 如果 n 只有 5 怎么做?
  • 如果只需要判断“有没有”而不是求最优呢?
  • 如果没有某个特殊限制呢?

简化后更容易看见核心结构。

05拆得越碎越好吗?

不是。

如果一个小问题必须依赖很多外部细节,拆得太碎反而会让关系更混乱。

06怎样判断拆分是否合理?

职责清楚

每块在解决什么?

接口明确

它需要什么输入?产生什么结果?

可以组合

小问题答案能组成最终答案。

你已经知道了什么

  • 复杂问题可以拆成更简单的子任务。
  • 可以按步骤、状态或更小子问题拆。
  • 先解决简化版能帮助发现核心规律。
  • 拆得过碎也可能增加复杂度。
  • 好的拆分要职责清楚、输入输出明确、能够组合。

下一篇:为什么要先从最简单的情况开始?

轮到你来试一试

找冠军函数返回 2,显示函数怎么知道它表示第二名、下标还是分数?

想好了吗?点开看解释

要事先约定返回值含义和编号规则,并用清楚的名字或结构表达。