我已經閱讀了河內塔問題陳述和解決方案。該解決方案指出,如果必須將一組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. 遞歸解答河內塔
- 4. 河內Java遞歸塔
- 5. 河內塔的遞歸解決方案
- 6. 河內C++塔(使用遞歸)
- 7. Scala中河內塔的尾遞歸
- 8. 計數遞歸調用 - 河內塔
- 9. 河內遞交的塔
- 10. Prolog - 河內塔
- 11. 河內Erlang塔
- 12. 漢諾塔(河內塔)
- 13. 4座塔河內塔
- 14. 瞭解河內塔的遞歸解決方案
- 15. 河內塔非遞歸:我的代碼是否正確?
- 16. 需要在「河內塔」遞歸調用的解釋
- 17. 用10塊板解決河內塔遞歸C++
- 18. 解決河內拼圖塔的遞歸方法
- 19. 遞歸算法對河內塔如何工作?
- 20. 使用堆棧的河內Python解決方案的遞歸塔
- 21. 河內問題塔
- 22. 河內邏輯塔
- 23. 河內塔動畫
- 24. Prolog河內的塔
- 25. 河內塔算法
- 26. 河內塔 - 河內的塔另一個輸出
- 27. 河內塔的變化(雙塔)
- 28. 河內之塔問題
- 29. OCaml中的河內塔
- 30. 河內塔計數器
見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