您的位置:首页 > 编程语言 > Python开发

Python自学-递归函数之汉诺塔问题

2019-01-29 21:50 176 查看

递归函数之汉诺塔问题

  • 规则(A B C 三个塔,盘子都在 A,最后盘子都放到 C) 1.每次移动一个盘子
  • 2.任何时候大盘子在下面,小盘子在上面
  • 方法:
      1.n = 1:直接把A上的一个盘子移动到C上,A -> C
    • 2.n = 2: 1). A -> B
    • 2). A -> C
    • 3). B -> C
  • 3.n = 3:
      1). 把 A 上的两个盘子,通过 C 移动到 B 上,调用递归实现
    • 2). 把 A 剩下的最大盘子移动到 C,A -> C
    • 3). 把 B 上的两个盘子,通过 A 移动到 C 上,调用递归实现
  • 4.n = n:
      1). 把 A 上的 n-1 个盘子,通过 C 移动到 B 上,调用递归实现
    • 2). 把 A 剩下的最大盘子移动到 C,A -> C
    • 3). 把 B 上的 n-1 个盘子,通过 A 移动到 C 上,调用递归实现
    # 汉诺塔问题实现步骤代码
    def hano(n,A,B,C):
    '''
    汉诺塔的递归实现
    n:代表几个盘子
    A:代表第一个盘子,开始的盘子
    B:代表第二个盘子,过渡的盘子
    C:代表第三个盘子,最后的盘子
    '''
    if n == 1:
    print(A,"-->>",C)
    return None
    # n = 2 这段 if 代码实际可以省去不写
    if n == 2:
    print(A,"-->>",B)
    print(A,"-->>",C)
    print(B,"-->>",C)
    return None
    
    # 当 n > 2 时,通过以下三个大步骤实现:
    
    # 1)把 n-1 个盘子,从 A 借助于 C 移动到 B,递归调用,注意参数位置变化
    hano(n-1,A,C,B)
    
    # 2)把 A 剩下的最大盘子移动到 C
    print(A,"-->>",C)
    
    # 3)把 n-1 个盘子,从 B 借助于 A 移动到 C,递归调用,注意参数位置变化
    hano(n-1,B,A,C)
    
    A = "A"
    B = "B"
    C = "C"
    
    # 调用 input 函数输入需要移动的盘子数量,并使用 int 转化为整数
    n = int(input(">>>请输入汉诺塔初始盘子数量:"))
    hano(n,A,B,C)
  • 内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
    标签: