广告位联系
返回顶部
分享到

使用Python实现汉诺塔问题介绍

python 来源:互联网 作者:佚名 发布时间:2024-02-13 20:14:50 人浏览
摘要

汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘

汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?

1.先谈一下什么是递归?

我自己的理解就是:将自身的问题不断减小规模,直到减小到无法减小为止。(到达递归结束条件)然后从小问题开始解决,小问题逐个解决之后,大问题也就迎刃而解了(递归回来了)

2.简而言之就是:

原问题不断减小为规模更小的原问题,然后小规模的原问题解决了,从而解决原来的大问题!

3.过程为:

减小规模、从小解决、递归回来、解决原问题!!!

4.递归的关键是:

(1)有递归结束条件。

(2)不断调用自身,减小问题规模,向递归结束条件靠拢。

汉诺塔问题

1.问题描述

有三根柱子,分别名为A,B,C。初始时,在柱子A上有n个圆盘,他们从下到上,盘子的大小是从大到小。在移动和摆放的过程中,小盘子必须在大盘子上面。 在保证规则的情况下,将柱子A上的所有盘子,移动到柱子C,移动中可以借助柱子B,但是得保证移动过程中小盘子必须得在大盘子上!!! 请打印出移动过程?

在这里插入图片描述

2.问题分析 递归的过程:

(1)将最上面的n-1个盘子,从A借助C移动到B

(2)将最下面的一个盘子,从A移动到C

(3)将最上面的n-1个盘子,从B借助A移动到C

递归的结束条件:

问题规模变成盘子数为0时,因为当盘子数为0时就不需要移动了!!!

3.代码(Python)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

# coding:utf-8

 

"""

    n为初始时A柱上的盘子数

    a为起始盘子所在的柱子

    b为中转柱子

    c为目的地柱子

"""

 

 

def hanoi(n, a, b, c):

    if n > 0:

        hanoi(n-1, a, c, b)

        print("盘子从%s移动到%s" % (a, c))

        hanoi(n-1, b, a, c)

 

 

 

hanoi(3, "A", "B", "C")

4.结果展示

在这里插入图片描述


版权声明 : 本文内容来源于互联网或用户自行发布贡献,该文观点仅代表原作者本人。本站仅提供信息存储空间服务和不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权, 违法违规的内容, 请发送邮件至2530232025#qq.cn(#换@)举报,一经查实,本站将立刻删除。
原文链接 :
相关文章
  • Python中OS module的使用介绍
    Python的os模块是用于与操作系统进行交互的标准库之一,它提供了许多有用的函数和变量,以便处理文件和目录。下面是一些常见的os模块函
  • 使用Python实现汉诺塔问题介绍

    使用Python实现汉诺塔问题介绍
    汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在
  • 自然语言处理NLP TextRNN实现情感分类
    概要 在自然语言处理(NLP)领域,情感分析及分类是一项十分热门的任务。它的目标是从文本中提取出情感信息和意义,通常分为两类:正
  • Python中selenium获取token的方法

    Python中selenium获取token的方法
    在不用(或不知道接口)接口获取token的情况下,通过selenium登录获取到token ------该token值会作为后续调用接口的凭证 ps:token、cookie 都可以是接
  • Python实现拉格朗日插值法的介绍
    概述拉格朗日插值法 什么是插值法 插值法是一种数学方法,用于在已知数据点(离散数据)之间插入数据,以生成连续的函数曲线。 插值
  • python使用json.dumps输出中文问题

    python使用json.dumps输出中文问题
    使用json.dumps输出中文 在使用json.dumps时要注意一个问题 1 2 3 import json print(json.dumps(中国)) \u4e2d\u56fd 输出的会是 中国 中的ascii字符码,而不是
  • python去除字符串中的空格、特殊字符和指定字符

    python去除字符串中的空格、特殊字符和指定字符
    去除字符串中的空格、特殊字符、指定字符等,在python中,为我们提供了三种方法: strip()删除字符串前后(左右两侧)的空格或特殊字符
  • Python中文词频统计介绍

    Python中文词频统计介绍
    词频统计是指在文本中计算每个词出现的次数。 在 Python 中,可以使用一些第三方库(如 jieba)来分词,然后使用字典等数据结构记录每个
  • Python Matplotlib基本用法介绍

    Python Matplotlib基本用法介绍
    Matplotlib Matplotlib 是Python中类似 MATLAB 的绘图工具,熟悉 MATLAB 也可以很快的上手 Matplotlib。 1. 认识Matploblib 1.1 Figure 在任何绘图之前,我们需
  • Python 中OS module的使用介绍
    Python的os模块是用于与操作系统进行交互的标准库之一,它提供了许多有用的函数和变量,以便处理文件和目录。下面是一些常见的os模块函
  • 本站所有内容来源于互联网或用户自行发布,本站仅提供信息存储空间服务,不拥有版权,不承担法律责任。如有侵犯您的权益,请您联系站长处理!
  • Copyright © 2017-2022 F11.CN All Rights Reserved. F11站长开发者网 版权所有 | 苏ICP备2022031554号-1 | 51LA统计