我已经阅读了河内塔问题陈述和解决方案。该解决方案指出,如果必须将一组N个磁盘从A移动到B,请将C用作临时磁盘,并将N-1个磁盘从A传输到C.然后将第N个磁盘从A传输到B,然后将N-1个磁盘从C到B.我知道这个问题已经减小了,因此是递归实现的竞争者。但是,我们一次不能传输超过1个磁盘。我们如何能够首先转移N-1个磁盘。河内塔递归
Q
河内塔递归
0
A
回答
0
通过使用递归。另请参阅Tower of Hanoi: Recursive Algorithm和维基百科页面
递归如下:您知道如何移动1张光盘,假设您知道如何移动n-1张光盘,您如何移动n张光盘?
的“假设”的部分是你的递归:你通过移动9,然后1,那么9
要移动的9盘10个移动盘,你的一举一动8,然后1,然后8
要移动8盘...
...
要移动2盘,你的一举一动1,然后1,然后按1
0
这就是递归步骤。使用相同的算法从A转移N-1
磁盘,将N
磁盘从A转移到B.如果N
是1,则只需移动单个磁盘即可。 (或者,如果N
等于零,则不做任何事情)。
伪代码:
move(N, A, B):
if (N > 0)
move(N-1, A, C)
move_single_disk(A, B)
move(N-1, C, B)
相关问题
- 1. 河内塔(递归)
- 2. 河内递归的java塔
- 3. 河内Java递归塔
- 4. 河内Erlang塔
- 5. Prolog - 河内塔
- 6. 用10块板解决河内塔递归C++
- 7. 河内塔非递归:我的代码是否正确?
- 8. 使用堆栈的河内Python解决方案的递归塔
- 9. 河内问题塔
- 10. 河内塔算法
- 11. PHP中的河内塔
- 12. 河内塔的输出
- 13. 河内的线性塔
- 14. 河内哈斯克尔塔
- 15. 河内之塔问题
- 16. 河内塔迭代功能
- 17. 河内塔计数器
- 18. 使用递归求解河内拼图
- 19. 解决河内拼图递归
- 20. 河内递归塔,访问冲突/分段错误,在dev C++编译器上
- 21. 这段代码有什么问题? (河内塔斯卡拉递归)
- 22. 递归河内塔如何保持三个阵列(支柱)的秩序?
- 23. 任何人都可以解释我在C语言河内塔的递归吗?
- 24. 单元测试河内问题塔
- 25. 河内塔的初始配置?
- 26. 河内塔与相邻的限制
- 27. 河内塔的实施 - 迭代程序
- 28. 在河内塔计数函数调用?
- 29. 河内塔计划 - 计数器
- 30. 河内塔反复n> 3挂钩
见http://stackoverflow.com/q/25625964/489590了解更多详情。 – 2014-09-02 14:36:35
以递归方式传输'N'个磁盘的方式传输'N-1'磁盘。当你下到一个磁盘时,转移是微不足道的。 – Paulpro 2014-09-02 14:37:41
@Srinath Kattula:如果你用C++标记这个问题,请添加一些源代码或删除标记。 – duDE 2014-09-02 14:37:52