汉诺塔问题即hanoi tower(递归)
发布时间
阅读量:
阅读量
又一次陷入了困境。
这次遇到了递归问题,并特别涉及到了汉诺塔问题。
题目意图是这样的:有三根相邻的柱子标号为A B C A柱上叠放着从下到上的金字塔状排列好的n个不同大小的圆盘
目标是将所有盘子逐一移动至C柱
在操作过程中同一根柱子上绝对不能出现大盘压小盘
请计算完成这一目标所需的最小移动次数并详细列出每一步的操作步骤。
用户可以通过输入指定金盘的数量n来开始程序。
测试案例中包括当n=3时的情况。
我们可以通过模拟具体步骤来理解规律:
假设在A柱上有编号为x y z三个从小到大依次排列的圆盘
那么按照以下步骤依次将它们转移到C柱上:
第一步 将x从A柱移动至C柱 这时从上至下A柱剩下y z B为空 C则已有x
第二步 将y从A移至B 操作后状态变为A仅有z B包含y C仍有x
第三步 将x从C移至B 现在状态变为A为空 B上有x y C仅剩z
第四步 将z从A移至C 现在状态变为A无 B为空 C上有x y z
第五步 将x从B移回至A 状态变为A有x B无 C有y z
第六步 将y从B转移至C 最终状态变为全部圆盘已转移到C柱并按从小到大排列
移动完毕。
先讨论输出一共有多少步骤的这个问题。其实自己实验一下可以发现这是有规律的:
n 步数(记为t)
1 1
2 3
3 7
4 15
…………..
我做的时候发现除了当n=1时,t=1之外,当n=i
全部评论 (0)
还没有任何评论哟~
