如何理解递归——假设子问题已解决
完成递归的两个关键
- 抽象成递推公式
- 找到终止条件
快速理解递归
如果一个问题 A 可以分解为若干个子问题 B、C、D,你可以假设子问题 B、C、D 已经解决,在此基础上思考如何解决问题 A。
你只需要思考问题 A 与子问题 B、C、D 两层之间的关系,不需要一层一层往下思考子问题与子子问题之间的关系。屏蔽掉递归细节,理解起来就简单多了。
关键心态
不用想一层层的调用关系,不要试图用人脑去分解递归的每个步骤。
人脑没办法想清楚整个”递”和”归”的过程。计算机擅长做重复的事情,递归正合它的胃口。而人脑更喜欢平铺直叙的思维方式——我们总想把递归平铺展开,脑子里一直循环,一层一层往下调再一层一层返回,试图搞清楚计算机每一步如何执行,这样就很容易被绕进去。
把信任交给计算机,把直觉留给自己。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 戴蒙斯的网络日志!