# -*- coding: utf-8 -*-
# @Time : 2025/4/4 16:15
# @Author : write1994
# @File : lear_Hanoi.py
# @Desc : 汉诺塔
'''
汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵
天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序
摞着 64 片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放
在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只
能移 动一个圆盘
'''
def hanoi(n, a, b, c):
'''汉诺塔问题'''
if n == 1:
print(a, '-->', c)
else:
hanoi(n - 1, a, c, b)
print(a, '-->', c)
hanoi(n - 1, b, a, c)
c = hanoi(5, 'A', 'B', 'C')
def hanoi(n, source, auxiliary, target):
if n == 1:
# 当只有一个圆盘时,直接从源柱子移动到目标柱子
print(f"Move disk 1 from {source} to {target}")
return
# 把 n-1 个圆盘从源柱子借助目标柱子移动到辅助柱子
hanoi(n - 1, source, target, auxiliary)
# 把第 n 个圆盘从源柱子移动到目标柱子
print(f"Move disk {n} from {source} to {target}")
# 把 n-1 个圆盘从辅助柱子借助源柱子移动到目标柱子
hanoi(n - 1, auxiliary, source, target)
# 测试汉诺塔函数,假设有 3 个圆盘
n = 5
hanoi(n, 'A', 'B', 'C')
03-09
2168
2168
03-18

被折叠的 条评论
为什么被折叠?



