编程实现5个盘子的汉诺塔问题;(递归算法)
1个回答
关注
展开全部
亲,你好,很高兴为您解答,编程实现5个盘子的汉诺塔问题;(递归算法)是方法/步骤1/8按照在《汉诺威塔四个圆盘完成攻略》中介绍的汉诺塔移动规律,点左面圆柱,拿起第一个圆盘,放到右面圆柱上。2/8点左面圆柱,拿起第二个圆盘,放到中间圆柱上。3/8点右面圆柱,拿起第一个圆盘,放到中间圆柱上。4/8点左面圆柱,拿起第三个圆盘,放到右面圆柱上。5/8将第一个圆盘和第二个圆盘,按照三个圆盘时的移动方法,放到右面圆柱上。点左面圆柱,拿起第四个圆盘,放到中间圆柱上。这样第五个圆盘就可以移动了。6/8将右面圆柱上的三个圆盘移动中间圆柱上。这样目标圆柱就被清空了。点左面圆柱,拿起第五个圆盘,放到右面圆柱上。7/8剩下的移动方法就要使用四个圆盘时的移动方法。将四个圆盘所在的圆柱,当作圆柱一,将没有圆盘的圆柱当作圆柱二,将第五个圆盘所在圆柱当作圆柱三。按照移动规律,当圆盘数是偶数时,第一个圆盘移动到偶数圆柱上。点中间圆柱,拿起第一个圆盘,放到左面圆柱上。8/8当把第四个圆盘移动到第五个圆盘上面时,此时与三个圆盘时的状态一样。剩下的按照三个圆盘时的移动方法进行移动。五个圆盘的汉诺塔游戏顺利完成。六个圆盘以及六个以上圆盘的游戏也是这样进行。不同之处就是移动的步数增加了许多。1.将n-1片圆盘从A移动到B上 2.将第n片圆盘从A移动到C上 3.将n-1片圆盘从B移动到C上将之变为可运行的代码为:def move(n, a, b, c): if n == 1: print(a, '--->', c) return else: move(n-1, a, c, b) move(1, a, b, c) move(n-1, b, a, c)第一次递归结果: A:0个 B:n-1个 C:1个第二次递归结果: A:n-2个 B: 0个 C:2个
咨询记录 · 回答于2022-10-26
编程实现5个盘子的汉诺塔问题;(递归算法)
亲,你好,很高兴为您解答,编程实现5个盘子的汉诺塔问题;(递归算法)是方法/步骤1/8按照在《汉诺威塔四个圆盘完成攻略》中介绍的汉诺塔移动规律,点左面圆柱,拿起第一个圆盘,放到右面圆柱上。2/8点左面圆柱,拿起第二个圆盘,放到中间圆柱上。3/8点右面圆柱,拿起第一个圆盘,放到中间圆柱上。4/8点左面圆柱,拿起第三个圆盘,放到右面圆柱上。5/8将第一个圆盘和第二个圆盘,按照三个圆盘时的移动方法,放到右面圆柱上。点左面圆柱,拿起第四个圆盘,放到中间圆柱上。这样第五个圆盘就可以移动了。6/8将右面圆柱上的三个圆盘移动中间圆柱上。这样目标圆柱就被清空了。点左面圆柱,拿起第五个圆盘,放到右面圆柱上。7/8剩下的移动方法就要使用四个圆盘时的移动方法。将四个圆盘所在的圆柱,当作圆柱一,将没有圆盘的圆柱当作圆柱二,将第五个圆盘所在圆柱当作圆柱三。按照移动规律,当圆盘数是偶数时,第一个圆盘移动到偶数圆柱上。点中间圆柱,拿起第一个圆盘,放到左面圆柱上。8/8当把第四个圆盘移动到第五个圆盘上面时,此时与三个圆盘时的状态一样。剩下的按照三个圆盘时的移动方法进行移动。五个圆盘的汉诺塔游戏顺利完成。六个圆盘以及六个以上圆盘的游戏也是这样进行。不同之处就是移动的步数增加了许多。1.将n-1片圆盘从A移动到B上 2.将第n片圆盘从A移动到C上 3.将n-1片圆盘从B移动到C上将之变为可运行的代码为:def move(n, a, b, c): if n == 1: print(a, '--->', c) return else: move(n-1, a, c, b) move(1, a, b, c) move(n-1, b, a, c)第一次递归结果: A:0个 B:n-1个 C:1个第二次递归结果: A:n-2个 B: 0个 C:2个
五个盘子 A B C D E这样走:A-3 B-2 A-2C-3 A-1 B-3 A-3D-2 A-2 B-1 A-1 C-2 A-3 B-2 1-2E-3 A-1 B-3 A-3 C-1 A-2 B-1 A-1 D-3 A-3 B-2 A-2 C-3A-1 B-3 A-3 得出
谢谢你
咱们就是说
还能不能问啊