2011-04-11 50 views
4
的塔感

的算法如下:不能讓我的老師遞歸算法河內

Algorithm move(k, from, to, spare) 
if k >0 then 
move(k−1, from, spare, to) 
printf (」move top disc from %d to %d\n」, 
from, to) 
move(k−1, spare, to, from) 

k是磁盤的數量(http://en.wikipedia.org/wiki/Tower_of_Hanoi) 。我理解遞歸,我只是不明白這是如何工作的,任何人都可以理解這一點?

對不起,我是在我這裏的描述含糊不清,這只是我的所發生的事情是非常模糊的認識太 - 我不知道是什麼的printf線正在做這似乎舉足輕重的整體功能。

+0

dup http://stackoverflow.com/questions/1223305/tower-of-hanoi-recursive-algorithm – cyclotrojan 2012-10-09 04:53:20

回答

5

遞歸算法分爲三個步驟:

  1. 移動所有的光盤,但一到「空閒」 PEG
  2. 將最後一張光盤到目的地掛
  3. 移動所有光盤,但一個(來自步驟1的那些)從備用掛鉤到目標掛鉤

因此,所有光盤已被移動到目標掛鉤。

步驟1和3是僞代碼中的兩個遞歸move(k-1, ...)調用。步驟2由printf建模。這裏

的一點是,步驟1和3將遞歸到更多的呼叫,以move,並且每個呼叫move爲其k > 0打印恰好一個指令符合prinft。那麼會發生什麼呢是這個算法會打印出你需要採取的步驟來逐一移動光盤。

實際上,這個僞代碼沒有實現移動釘的算法;如果您願意的話,這是向人類提供指令的算法。