河内塔有4座塔楼

时间:2014-02-21 23:17:33

标签: python recursion towers-of-hanoi

到目前为止,我知道如何用3座塔楼做河内塔,但我不知道如何为4座塔楼实施帧管家算法。

这就是我目前的三塔功能的样子。

def move_three_towers(n, from_tower, to_tower, spare_tower):
    if (n > 0):

        move_three_towers(n-1, from_tower, spare_tower, to_tower)
        print(from_tower, ' --> ', to_tower)
        move_three_towers(n-1, spare_tower, to_tower, from_tower)

我需要帮助使用4个塔实现n-k磁盘到另一个塔。对于一些1≤k<1。 Ñ

这是我对算法的尝试,但它不起作用,请帮忙。

def move_four_towers(n, k = 0, from_tower, to_tower, spare_tower1, spare_tower2):
     if n == 1:
        print(from_tower, ' --> ', to_tower)
     if n > 1:
        move_four_towers(n - k, from_tower, spare_tower2, spare_tower1, to_tower)
        print(from_tower, ' --> ', to_tower)
        move_three_towers(k, from_tower, to_tower, spare_tower1)
        move_four_towers(n - k, spare_tower2, to_tower, spare_tower1, from_tower)

1 个答案:

答案 0 :(得分:1)

维基百科对r钉和n个磁盘的算法进行了很好的描述:

  

可以递归地描述算法:

     
      
  • 对于某些k1 <= k < n,将顶部k磁盘转移到除起始或目标挂钩之外的单个挂钩,并执行T(k,r)次移动。< / p>

  •   
  • 在不打扰现在包含前k个磁盘的挂钩的情况下,将剩余的n-k磁盘转移到目标挂钩,仅使用剩余的r-1挂钩,进行T(n-k,r-1)次移动。

  •   
  • 最后,将k个热门转移到目的地挂钩,进行T(k,r)次移动。

  •