一、汉诺塔问题
汉诺塔是经典的递归算法问题,起源于印度古老传说,核心是借助递归思想解决有序圆盘的移动难题。问题设定为有 3 根柱子和 n 个大小互不相同的圆盘,初始时所有圆盘按 “大盘在下、小盘在上” 的顺序叠放于第一根柱子,要求遵循两个规则完成所有圆盘向目标柱子的整体移动:一是每次只能移动一个圆盘,二是移动过程中任意柱子上的圆盘都需保持 “大盘始终在小盘下方” 的顺序。
其解题核心是递归拆解问题:要移动 n 个圆盘,只需先把上方 n-1 个圆盘从起始柱移到辅助柱,再将最大的第 n 个圆盘从起始柱移到目标柱,最后把辅助柱上的 n-1 个圆盘移到目标柱即可。n 个圆盘的最少移动步数为 2ⁿ-1,步数会随圆盘数量呈指数级增长,该问题常被用于理解递归的核心逻辑 —— 将复杂大问题拆解为同类型的简单小问题,直至触达可直接解决的边界条件。
二、汉诺塔中的递归拆解
首先我们先看一个比较简单的,把两个盘子借助B柱从A柱移动到C柱上,保证大盘在下,小盘在上,你有什么想法?
我来给大家演示一下:
我们经历了三步,A->B ,A->C ,B->C
那我们加大难度,试一试三个盘子:
步骤如下:
我们经历了七步,A->C,A->B,C->B,A->C,B->A,B->C,A->C …
当n个盘子需要借助B柱从A柱移动到C柱上时,我们应该怎么办?
我们可以观察上面两个例子,发现不管如何,实际上都是先把A柱上n-1个盘子借助C柱从A柱移到B柱,再把A柱下面最大的盘子从A柱移到C柱,再把B柱上n-1个盘子从B柱移到C柱。 步骤如下:



