汉诺塔:把整座塔搬过去,最少步数是 2ⁿ−1
一局几分钟:3 根柱子,把 3、4 或 5 个盘从左柱搬到右柱,大盘不能压在小盘上。点一根柱拿起顶上的盘,再点一根柱放下;试着违规时页面把规则和柱面讲给你听。搬完结算:你的步数和最少步数 2ⁿ−1 当场对比,并讲清省步的递归思路。不下载、不注册、不上传。
开一局点柱取盘 · 点柱放盘 · 全程在你这台设备里算
点一根柱,拿起它顶上的盘。
大盘不能压在小盘上——试着这么放时,页面会把规则和当前柱面讲给你听;我们不做撤销和自动演示:几步内的事,撤销是负体验,演示会替你思考;中途刷新就重开,如实说明
这一页怎么用
- 选盘数开一局:3 个盘(最少 7 步)上手,4 个盘(15 步)进阶,5 个盘(31 步)挑战;
- 点一根柱拿起它最上面的盘(高亮显示,再点同一根是放回去),点目标柱放下——空柱或比它大的盘上都可以;试着把大盘压在小盘上时,页面会把规则和当前柱面讲给你听;
- 把全部盘搬到右柱即完成:步数与最少步数(2ⁿ−1)当场对比,结算会把递归思路讲给你听,最少步数与完成局数记进本机成绩。
最少步数为什么是 2ⁿ−1
要把 n 个盘从左柱搬到右柱,最底下那个大盘必须先腾出右柱——所以得先把上面 n−1 个盘整个搬到中柱,大盘落位,再把 n−1 个盘从中柱搬回来。而「搬 n−1 个盘」本身就是一个小一号的汉诺塔(只是中转柱换了位置)。这就是递归:n 个盘的步数 = 搬 n−1 个盘两趟 + 1 步,T(n) = 2·T(n−1) + 1,一路推到 T(1) = 1,就是 2ⁿ−1。3 个盘 7 步、4 个盘 15 步、5 个盘 31 步。
所以汉诺塔的正确打开方式不是一步步试,而是每一手都先问:「要把 n 个搬过去,现在得把 n−1 个搬到哪?」答得出这个问题,7 步和 31 步都不难;答不出,5 个盘试到 100 步也未必到头。
如实说清楚的几件事
- 违规操作(大盘压小盘、拿空柱)不扣分不惩罚——页面把规则讲一遍,盘放回原处,错的那一手本身就是学习;
- 我们不做撤销:一局最多 31 步,撤销按钮省下的那两步,换来的是不用动脑;也不做自动演示——看别人搬塔不算会搬塔;
- 成绩按盘数分开记(3、4、5 盘各一条最少步数与完成局数),正好用的步数会注明「等于最少步数」;
- 中途刷新就重开,不做中断续局,如实说明;成绩、盘数偏好只存在你这台设备的浏览器里,判定与结算全在本地跑,服务器不知道你玩到哪。
常见问题
怎么开始玩?
打开页面选好盘数就是一局:盘都套在左柱上。点一根柱,拿起它最上面的盘(高亮显示);再点一根柱,把盘放下去——空柱或比它大的盘上都可以放。再点同一根柱是放回去。全部盘搬到右柱就完成。
大盘压小盘被拦下时,会不会扣分?
不会。违规的那一手放不下去,页面把规则讲一遍(「右柱顶上是 2 号盘,你搬的 5 号盘比它大」),盘放回原处,步数不涨不扣——错的那一手本身就是学习。这里所有反馈都是解释规则,不是报错。
最少步数 2ⁿ−1 是怎么来的?
要把 n 个盘搬到右柱,最底下的大盘必须先腾出落点——所以先把上面 n−1 个盘整个搬到中柱(这是一趟小一号的汉诺塔),大盘落位用 1 步,再把 n−1 个盘搬回来(又一趟)。步数 T(n) = 2·T(n−1) + 1,一路推到 T(1) = 1,就是 2ⁿ−1:3 盘 7 步、4 盘 15 步、5 盘 31 步。
为什么没有撤销和自动演示?
一局最多 31 步,撤销按钮省下两步,换来的是不用动脑;自动演示更是把「想」这个环节整个拿走了。汉诺塔练的就是搬之前先想「上面这摞该去哪」,我们把这个环节留给你。点错的手放回去重新选就行,成本很低。
几个盘合适?
3 个盘(最少 7 步)上手,感受「先腾地方再落盘」的节奏;4 个盘(15 步)是多数人第一次真正用上递归思路的档位;5 个盘(31 步)留给挑战——想清楚每一摞的中转柱,比手快重要得多。
成绩存在哪里?会被上传吗?
只存在你自己浏览器的 localStorage 里:每一档的最少步数和完成局数,正好用最少步数完成的会单独标出。柱面渲染和合法性判定也全在你浏览器里跑,服务器只负责把页面发给你。换设备或清理浏览器数据成绩就没有了;重置要连点两次确认。