lluvia900125 2022-10-15 22:31 采纳率: 45%
浏览 24
已结题

汉诺塔递归,python

汉诺塔递归错解,想知道错误原因在哪儿
#我把每个柱子上盘子当作一个stack,hanoi(s1,s2,s3)就是把stack1里的通过stack2移动到stack3里。
# hanoi(s1[1:],s3,s2) 是把stack1除了第一层的盘子通过stack3移动到stack2

def hanoi(s1,s2,s3): 
    h = len(s1)
    if h >= 1:
        hanoi(s1[1:],s3,s2) 
        s3.append(s1.pop())  
        hanoi(s2,s1,s3) 
    print(f"{s1}{s2}{s3}") 
运行结果及报错内容
为什么我这个想法实现不了呢,哪里出错了呢
  • 写回答

1条回答 默认 最新

  • honestman_ 2022-10-15 22:40
    关注
    
    i = 1
    def move(pfrom, pto):
        global i
        print("第%d步:%s ---> %s" % (i, pfrom, pto))
        i += 1
     
    def hanoi(n, a, b, c):
        if n == 1:
            move(a, c)
        else:
            hanoi(n - 1, a, c, b)
            move(a, c)
            hanoi(n - 1, b, a, c)
     
    n = int(input("请输入盘数:"))
    print("具体走法步骤如下:")
    hanoi(n, "A", "B", "C")
    print("一共需走%d步" % (i - 1))
    
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 10月15日
  • 创建了问题 10月15日