Hanoi塔(汉诺塔/梵天塔)问题

Hanoi塔

汉诺塔(梵天塔/Hanoi)问题是计算机中比较典型的一个递归问题。废话不多说了,直接上代码。

Python3.5代码
"""
    重温本科学习过之书籍:计算机科学概论,C语言程序设计,
    C++面向对象程序设计,操作系统,数据结构,计算机网络,
    Linux操作系统使用教程等.
"""


#!/usr/bin/env python
#-*- coding:utf-8 -*-
'''
@author  : FIGTHING
@file    : Hanoi.py
@function: 
@software: Pycharm
@time    : 2020/04/26/17:31
'''
"""
Hanoi问题(递归问题):
将第一个柱子上的n个盘子,借助第二个柱子,全部移到第三个柱子上。
规则:
1)每次只能移动一个盘子;
2)盘子只能在三个柱子上来回移动,不能放在其他地方;
3)三个柱子上的盘子必须始终保持大盘在下,小盘在上。
"""
#定义Hanoi函数:n盘子个数,left第一个柱子,middle第二个柱子,right第三个柱子
def Hanoi(n, left, middle, right):
    global count
    if n == 1:
        print(left, "-->", right)   #当n=1,将第一个柱子上的盘子直接房子第三个柱子上。
        count+=1
    else:
        Hanoi(n-1, left, right, middle)     #把n-1个盘子借助第三个柱子,从第一个柱子挪到第二个柱子
        print(left, "-->", right)           #将最后一个盘子从第一个柱子挪到第三个柱子
        count+=1
        Hanoi(n-1, middle, left, right)     #把n-1个盘子借助第一个柱子,从第二个柱子挪到第三个柱子

#输入盘子个数
n = int(input("Please Hanoi`s number:"))
#移动盘子的次数。f(count) = 2^n - 1
count=0
Hanoi(n, "left", "middle", "right")
print(count)

运行结果

当你输入盘子的个数后,运行结果就会显示每一步的操作以及执行的总步数。
在这里插入图片描述


(小编的话:距离上次写博客又过去一个多月了。惭愧惭愧!希望你们没有浪费这疫情期间的这几个月。)
("The mankind’s courage and resolution will be witnessed and remembered by stars. FIGHTING…")

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值