莫待无花空折枝 发表于 2020-5-22 11:30:06

零基础学习python之汉诺塔

def hanoi(n,x,y,z):
    # 如果只有一层,直接从x移动到z上
    if n == 1:             #返回条件
      print(x ,"-->" ,z)
    else:
      hanoi(n-1,x,z,y)      #需要将n-1层借助z从x移到y上
      print(x ,"-->", z)
      hanoi(n-1,y,x,z)       #需要将n-1层借助x从y移到z上

n = int(input("请输入汉诺塔的层数:"))
hanoi(n,"X","Y","Z")       #位置参数   注意形参和实参的转化
如何修改程序可以输出汉诺塔移动的次数?

Twilight6 发表于 2020-5-22 11:30:49

本帖最后由 Twilight6 于 2020-5-22 11:43 编辑

加个count 计数

count = 0
def hanoi(n,x,y,z):
    global count
    # 如果只有一层,直接从x移动到z上
    if n == 1:             #返回条件
      count += 1
      print(x ,"-->" ,z)
    else:
      count += 1
      hanoi(n-1,x,z,y)      #需要将n-1层借助z从x移到y上
      print(x ,"-->", z)
      hanoi(n-1,y,x,z)       #需要将n-1层借助x从y移到z上

n = int(input("请输入汉诺塔的层数:"))
hanoi(n,"X","Y","Z")       #位置参数   注意形参和实参的转化
print('移动了:%d次'%count)
假设你输入的层数是 4那么 2**4 == 16    搬运次数为16-1= 15

qiuyouzhi 发表于 2020-5-22 11:32:10

cnt = 0
def hanoi(n,x,y,z):
    global cnt
    # 如果只有一层,直接从x移动到z上
    if n == 1:             #返回条件
      print(x ,"-->" ,z)
      cnt += 1
    else:
      hanoi(n-1,x,z,y)      #需要将n-1层借助z从x移到y上
      print(x ,"-->", z)
      cnt += 1
      hanoi(n-1,y,x,z)       #需要将n-1层借助x从y移到z上

n = int(input("请输入汉诺塔的层数:"))
hanoi(n,"X","Y","Z")       #位置参数   注意形参和实参的转化
print(cnt)

heidern0612 发表于 2020-5-22 11:35:03

move = 0
def hanoi(n,x,y,z):
    global move
    # 如果只有一层,直接从x移动到z上
    if n == 1:             #返回条件
      move += 1
      print(x ,"-->" ,z)
      print(f"当前移动{move}次。")
    else:
      hanoi(n-1,x,z,y)      #需要将n-1层借助z从x移到y上
      move += 1
      print(x ,"-->", z)
      print(f"当前移动{move}次。")
      hanoi(n-1,y,x,z)       #需要将n-1层借助x从y移到z上

n = int(input("请输入汉诺塔的层数:"))
hanoi(n,"X","Y","Z")       #位置参数   注意形参和实参的转化

zwhe 发表于 2020-5-31 10:50:43

{:5_110:}
页: [1]
查看完整版本: 零基础学习python之汉诺塔