#!/usr/bin/env python
# -*- coding:utf-8 -*-
# Author: Jia ShiLin
'''
汉诺塔:::
list1,list2,list3三个数组代表三个柱子和圆盘
数字的大小代表圆盘的大小!
数字的顺序代表圆盘的顺序
'''
# 汉诺塔函数
def h(n, x_list, y_list, z_list, x, y, z):
global count
if (n == 1):
count += 1
print('%s->%s' % (x, z))
try:
tt = x_list.pop(0)
z_list.insert(0, tt)
except:
pass
print(list1, '################', list2, '################', list3)
else:
# h(x_list.pop(),x, z_list.append(x_list.pop()) ,x,z,y)
h(n - 1, x_list, z_list, y_list, x, z, y)
print('%s->%s' % (x, z))
try:
t = x_list.pop(0)
z_list.insert(0, t)
count += 1
except:
pass
print(list1, '################', list2, '################', list3)
h(n - 1, y_list, x_list, z_list, y, x, z)
return count
count = 0 # 移动步数
num = int(input('输入汉诺塔个数N')) #圆盘初始个数
# 三个柱子和圆盘
list1 = list(range(1, num + 1))
list2 = []
list3 = []
# 初始状态打印
print('初始值')
print(list1, '################', list2, '################', list3)
# 调用h()
h(num, list1, list2, list3, 'x', 'y', 'z')
print('总共移动步数:%d' % count)
汉诺塔_递归过程
最新推荐文章于 2023-03-04 04:52:47 发布