算法如下:
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 :(得分:5)
递归算法分为三个步骤:
因此,所有光盘都已移至目标挂钩。
步骤1和3是伪代码中的两个递归move(k-1, ...)
调用。第2步由printf
建模。
这里的要点是,步骤1和3将递归到对move
的更多调用,并且每次调用move
,k > 0
只打印一个{{1}的指令行}}。因此,该算法将打印出您需要采取的逐步移动光盘的步骤。
实际上,这个伪代码没有实现移动钉子的算法;它是为人类提供指令的算法,如果你愿意的话。