Python递归实现汉诺塔游戏

2023-04-15 00:00:00 游戏 递归 汉诺

汉诺塔(Tower of Hanoi)是一种经典的数学难题。它由三个塔 A、B、C 和一堆大小不等的圆盘组成,每个圆盘都穿过一个中央的杆。开始时,所有的盘子都按由大到小的顺序堆叠在塔 A 上。任务是将整个塔从 A 移动到 C,每次只能移动一个圆盘,并且不能将大盘子放在小盘子上面。

Python 递归实现汉诺塔游戏的代码如下:

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)

n = int(input('输入汉诺塔层数:'))
hanoi(n, 'A', 'B', 'C')

在这段代码中,定义了 hanoi 函数,其中 n 是汉诺塔的层数,a、b、c 分别表示三个塔。如果 n 等于 1,表示只有一层,直接从 a 塔移动到 c 塔;否则,递归调用 hanoi 函数把 n-1 层从 a 塔移动到 b 塔,再把第 n 层从 a 塔移动到 c 塔,最后把 n-1 层从 b 塔移动到 c 塔。

在主函数中,首先让用户输入汉诺塔的层数,然后调用 hanoi 函数进行移动操作。

如果要使用字符串作为范例,可以把塔的名称改成字符串,如下所示:

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)

n = int(input('输入汉诺塔层数:'))
hanoi(n, 'pidancode.com', 'Python', '皮蛋编程')

这样就可以使用“pidancode.com”、“Python”、“皮蛋编程”作为塔的名称了。

相关文章