title: 如何理解汉诺塔的递归？
desc: 学C 递归篇 看懂了斐波那契序列的递归 但是却死也看不懂移动汉诺塔<br>主要问题有两个<br><ol><li>怎么把一个大的移动问题分解成三部分？而这三部分恰好是要递归的三步<li><li>递归的三步如何完美的控制（明明三步中嵌套两步 思维乱死了）<li><ol>
topic: 思维
content: 汉诺塔的话Concrete Mathematics第一章就讲了，我觉得讲得挺好。汉诺塔的话代码不难写，正确性也不难证明，稍微麻烦一点的是证明这是最小步数。第一章还讲了recurrance。记得把题也做了。不理解递归可以好好刷刷数学归纳法。当然写到代码用到递归就得刷调用栈，栈帧，了解下calling convention。这个随便研究下就行了，弄gdb单步调试调试，打出backtrace看看。数学归纳法和调用栈都了解之后递归就不是玄学了。别人已经讲了 F
answerer_tags: Twitter: @timshen_