(步骤1) 如果是一个盘子
直接将a柱子上的盘子从a移动到c
(步骤2) 先将a柱子上的n-1个盘子借助c移动到b(图1)
代表将a柱子仩的盘子借助c柱子移动到b柱子,这里调用函数的时候是将a柱子上的n-1个
盘子借助c柱子移动到b柱子。所以这里需要将位置调换一下hanoi(n-1,a,c,b)
(步骤3) 此时移动完如图1,但是还没有移动结束首先要将a柱子上的最后一个盘子(第n个)盘子直接移动到c(图2)
(步骤4) 最后将b柱子上的n-1个盘子借助a移动到c(图3)
这样递归算法就完成了。如果第一遍没懂仔细读三四遍应该就没问题了。
汉诺塔问题是递归中的经典通過简单的递归思想解决了复杂的问题。
古代有一个梵塔塔内有3个座A、B、C,开始时A座上有64个盘子盘子大小不等,大的在下小的在上。有一个老和尚想把这64个盘子从A座移到C座但规定每次只允许移动一个盘,且在移动过程中在3个座上都始终保持大盘在下小盘在上。在移动过程中可利用B座
请编程序输出移动这些盘子的详细步骤。
这个问题的框架已经给你搭好了只需要在 else 部分写三句话(3个动作,其中2个和 n-1 有关)就可以了
你一定要好好琢磨琢磨,如果能想出来你的C语言递归汉诺塔每一步详解功力会有巨大的提升哦!
下面有答案!看看和你想的是不是一样。
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。