数据结构与算法(算法设计):四柱汉诺塔递归算法

题目:如果汉诺塔有4根柱子,要将堆放在第一 根柱子上从小到大排列的n个盘子移动到最后一根柱子上,试实现相应的递归算法。

      汉诺塔问题是一个经典的递归问题,如果有4根柱子,要将堆放在第一根柱子上从小到大排列的n个盘子移动到最后一根柱子上,可以按照以下步骤进行递归算法实现:
      1. 将n个盘子分成两部分,前n-1个盘子和最后一个盘子。
      2. 将前n-1个盘子从第一根柱子移动到第二根柱子上,可以借助第四根柱子。
      3. 将最后一个盘子从第一根柱子移动到第四根柱子上。
      4. 将前n-1个盘子从第二根柱子移动到第四根柱子上,可以借助第三根柱子。
      5. 重复以上步骤,直到所有盘子都移动到最后一根柱子上。

写法一:

def hanoi(n, a, b, c, d):
    if n == 1:
        print("Move disk 1 from", a, "to", b)
        return
    if n == 2:
        print("Move disk 1 from", a, "to", c)
        print("Move disk 2 from", a, "to", b)
        print("Move disk 1 from", c, "to", b)
        return
    hanoi(n-2, a, d, b, c)
    print("Move disk", n-1, "from", a, "to", d)
    print("Move disk", n, "from", a, "to", b)
    print("Move disk", n-1, "from", d, "to", b)
    hanoi(n-2, c, b, a, d)

hanoi(4, 'A', 'B', 'C', 'D')

写法二:

def hanoi(n, a, b, c, d):
    if n == 1:
        print("Move disk 1 from", a, "to", b)
        print("Move disk 1 from", b, "to", c)
        print("Move disk 1 from", c, "to", d)
        return
    hanoi(n-1, a, b, d, c)
    print("Move disk", n, "from", a, "to", b)
    hanoi(n-1, d, c, b, a)
    print("Move disk", n, "from", b, "to", c)
    hanoi(n-1, a, b, d, c)

n = 4
a = "A"
b = "B"
c = "C"
d = "D"
hanoi(n, a, b, c, d)

写法三:

def move(n, a, b, c, d):
    if n == 1:
        print(a, '-->', d)
    elif n == 2:
        print(a, '-->', b)
        print(a, '-->', d)
        print(b, '-->', d)
    else:
        move(n-2, a, c, d, b)
        print(a, '-->', c)
        print(a, '-->', d)
        print(c, '-->', d)
        move(n-2, b, a, c, d)

move(4, 'A', 'B', 'C', 'D')

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值