完成递归的两个关键

  1. 抽象成递推公式
  2. 找到终止条件

快速理解递归

如果一个问题 A 可以分解为若干个子问题 B、C、D,你可以假设子问题 B、C、D 已经解决,在此基础上思考如何解决问题 A。

你只需要思考问题 A 与子问题 B、C、D 两层之间的关系,不需要一层一层往下思考子问题与子子问题之间的关系。屏蔽掉递归细节,理解起来就简单多了。

关键心态

不用想一层层的调用关系,不要试图用人脑去分解递归的每个步骤。

人脑没办法想清楚整个”递”和”归”的过程。计算机擅长做重复的事情,递归正合它的胃口。而人脑更喜欢平铺直叙的思维方式——我们总想把递归平铺展开,脑子里一直循环,一层一层往下调再一层一层返回,试图搞清楚计算机每一步如何执行,这样就很容易被绕进去。

把信任交给计算机,把直觉留给自己。