我已經閱讀了河內塔問題陳述和解決方案。該解決方案指出,如果必須將一組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