用python解决汉诺塔问题

本文介绍了使用Python解决汉诺塔问题的思路和代码实现,包括递归函数、移动序列的输出以及解答过程中的难点。通过学习,作者对Python语法和递归有了更深的理解,并反思了代码优化的重要性。
摘要由CSDN通过智能技术生成

2.6 汉诺塔问题

写出解5个环的汉诺塔问题的移动序列

代码

print('请输入汉诺塔的层数(为运算与展示考虑请尽量不要大于5)')
N = int(input())
global A, B, C, step
A = []
B = []
C = []
step = 0
for i in range(N):
    A.append(i)
A.reverse()


def pop(stack):  # 出栈操作。pop返回列表stack中的最后一个元素,并从原列表中删除该元素
    node = len(stack)
    if (node == 0):
        print('栈为空')  # 若栈中无元素,则报告栈为空的信息
        return
    else:
        pop = stack[node - 1]
        del stack[node - 1]
        return pop


def push(element, stack):  # 入栈操作。element为压入栈的元素,stack为栈,类型为列表,函数无返回值
    stack.append(element)
    return


def move(stack1, stack2):  # 汉诺塔的一次操作,将stack1的栈顶元素放至stack的栈顶
    if(len(stack1) == 0):
        return
    temp = pop(stack1)
    push(temp, stack2)
    return


def tower(s1, s2, s3, N=-1):  # 汉诺塔算法,借助s2,将s1的N层移动到s3
    global step
    if(N == -1):
        N = len(s1)

    if(N == 0):
        return<
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值