汉诺塔问题的详细讲解(python版)

article/2025/6/16 8:15:38
2022.3.17
2022.11.15 增加次数计算

一.抽象为数学问题:

从左到右有A、B、C三根柱子,其中A柱子上面有从小叠到大的n个圆盘,现要求将A柱子上的圆盘移到C柱子上去,期间只有一个原则:一次只能移到一个盘子且大盘子不能在小盘子上面,求移动的步骤和移动的次数。【图 n=3】
在这里插入图片描述

二 条件

  1. 最开始A柱有放好的盘子,移到C放好
  2. 每次只能移动一个圆盘
  3. 任何时刻都不能将一个较大的圆盘压到较小的圆盘纸上

三 讲解

  1. 创建个汉罗塔函数hanoi(A,B,C,n)

    n是几个盘子,A,B,C分别表示柱子

  2. n=1时,只有一个盘子 那个直接 A柱内容 移到 C柱内容
    我们看函数,四个参数,其实就是第1个参数移到第3个参数点非常重要,后面会用到

def hanoi(A, B, C, n):if n == 1:print(A, '->', C)

在这里插入图片描述
在这里插入图片描述
3. 当n>1时 ,我们发现A柱初始状态下,上面是n-1的汉罗塔初始状态+最下面的大盘
在这里插入图片描述
我们 把上面n-1个汉罗塔看成整体 ,只需做下面三步

  • ① 借助C柱我们先把 n-1汉罗塔 移到B柱子
    在这里插入图片描述
  • ② 借助B,把A 移到 C

在这里插入图片描述

  • ③ 把B柱 n-1汉罗塔 移到 C

在这里插入图片描述

四 代码

def hanoi(A, B, C, n):if n == 1:print(A, '->', C)eles:#将A柱中n-1汉罗塔 移到B住hanoi(A,C,B,n-1)# 将A中最大的地盘 移到C,没有移动汉罗塔,所以直接输出print(A, '->', C)# 将B柱中n-1汉罗塔看成整体 移到C柱hanoi(B,A,C,n-1)

汉罗塔内部顺序写法,根据的是:

在这里插入图片描述

五 实例 n=4

def hanoi(A, B, C, n):if n == 1:print(A, '->', C)else:hanoi(A,C,B,n-1)print(A, '->', C)hanoi(B,A,C,n-1)hanoi('A','B','C',4)
A -> B
A -> C
B -> C
A -> B
C -> A
C -> B
A -> B
A -> C
B -> C
B -> A
C -> A
B -> C
A -> B
A -> C
B -> C

六 关于移动次数的计算

  • 用参数每次带入
def hanoi(A, B, C, n):time = 0if n == 1:print(A, '->', C)time += 1else:time +=hanoi(A,C,B,n-1)print(A, '->', C)time += 1time +=hanoi(B,A,C,n-1)return(time)hanoi('A','B','C',4)
  • 全局变量global
time = 0
def hanoi(A, B, C, n):global timeif n == 1:print(A, '->', C)time += 1else:hanoi(A,C,B,n-1)print(A, '->', C)time += 1hanoi(B,A,C,n-1)hanoi('A','B','C',4)
print(time)

http://chatgpt.dhexx.cn/article/Ihgeg9ga.shtml

相关文章

Golang 汉罗塔问题

先用一般方法实现汉罗塔方法: 先确定三个"石柱" A B C 。n代表A柱起始圆盘数量 主函数: 结合栈来实现汉罗塔。 因为栈先进后出的特点 很适合汉罗塔。其实和上述方法本质一样,只不过添加了 栈的特性 这里定的栈最大容量为7,可以根据实际情况更改 栈的构造&#xff…

汉罗塔(递归分治)

Java代码如下 public class Hanoi {//操作步骤数private static int steps 1;public static void main(String[] args) {//盘子数目int diskNumber 4;doTowers(diskNumber, A, B, C);}private static void doTowers(int diskNum, char from , char via, char to){if (diskNum…

汉诺塔(Hanoi)问题,Java实现,C语言实现,Python实现!!!

目录 一、汉诺塔的玩法 二、汉诺塔的逻辑 三、代码实现 四、运行结果 五、总结 一、汉诺塔的玩法 汉诺塔(Tower of Hanoi),又称河内塔,是一个源于印度古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子&#x…

Java基础语法(汉罗塔)

Java基础语法(汉罗塔) 1 起源2 需求3 分析3.1 1个碟子3.2 2个碟子3.3 3个碟子3.4 4个碟子3.5 规律 4 代码实现:直接算法5 代码实现封装:栈的思想 1 起源 汉罗塔(又称河内塔)问题是源于印度一个古老传说的益…

《经典递归问题:汉罗塔》

🌠作者:TheMythWS. 🎆专栏:《JavaSE》 🎇座右铭:不走心的努力都是在敷衍自己,让自己所做的选择,熠熠发光。 目录 ✨汉罗塔的介绍 图解游戏​ ✨N层汉罗塔需移动的次数 ✨汉罗塔的…

数据链路层 功能概述

数据链路层的研究思想 数据链路层基本概念 数据链路层功能概述 数据链路层功能概述

数据链路层功能概述、封装成帧与透明传输

你一定要做自己,做自己喜欢的事,然后把自己交给命运 文章目录 本章启航思维导图数据链路层数据链路层基本概念数据链路层功能概述封装成帧透明传输组帧的四种方法字符计数法字符填充法零比特填充法违规编码法 本章启航思维导图 数据链路层 数据链路层基…

【计算机网络】数据链路层——数据链路层功能/组帧/差错控制

文章目录 数据链路层数据链路层的功能为网络层提供服务链路管理帧定界、帧同步与透明传输流量控制 组帧字符计数法字符填充的首尾定界符法零比特填充的首尾标志法违规编码法 差错控制检错编码奇偶校验码循环冗余码 纠错编码 数据链路层 数据链路层的功能 数据链路层在物理层提…

19数据链路层的功能

1、数据链路层的功能 数据链路层在物理层提供服务的基础上向网络层提供服务,其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造成逻辑上无差错的数据链路,使之对网络层表现为一条无差错的链路。 2、为网络层…

计算机网络——数据链路层功能概述、封装成帧、差错控制、流量控制与可靠传输机制

文章目录 前言一、数据链路层功能概述二、封装成帧1、透明传输2、封装成帧3、组帧的方法⑴字符计数法⑵字符/节填充法⑶零比特填充法⑷违规编码法 三、差错控制1、差错由来2、检错编码⑴奇偶校验码⑵循环冗余码 3、纠错编码——海明码 四、流量控制与可靠传输机制1、停止等待协…

计算机网络【数据链路层的功能】

计算机网络【数据链路层的功能】 数据链路层基本概念数据链路层功能概述封装成帧透明传输字符计数法字符填充法零比特填充法 差错控制差错从何而来?CRC 循环冗余码 数据链路层基本概念 数据链路层使用的信道主要有一下两种类型: 点对点信道&#xff1a…

数据链路层主要功能

透明传输 个人理解,透明传输其实就是指无论是什么报文都可以传输,非透明传输就是指某些特殊字符不能传输,在计算机网络中,透明传输在数据链路层提到过,在数据链路层将网络层协议封装成帧时,会在首部和尾部分…

数据链路层(内容超多哦)

数据链路层——交换机 1. 数据链路概述2. 以太网2.1 以太网帧格式2.2 交换机设备简介2.3 交换机的工作原理2.4 交换机以太网的工作模式2.5 配置前的准备 3. 命令行的使用 1. 数据链路概述 数据链路层的功能:1.数据链路的建立、维护与拆除 2.帧包装、帧传输、帧同步…

计算机网络:数据链路层功能

文章目录 1.为网络层提供服务2.链路管理3.帧定界、帧同步与透明传输4.流量控制5.差错控制 数据链路层在物理层提供服务的基础上向网络层提供服务,其主要作用是加强物理层传输原始比特流的功能,将物理层提供的可能出错的物理连接改造为逻辑上无差错的数据…

计算机网络-数据链路层功能概述

数据链路层的研究思想 基本概念 结点: 主机, 路由器 链路: 网络中两个结点之间的物理通道, 链路的传输介质主要有双绞线, 光纤 和微波, 分为有线链路和无线链路 数据链路: 网络中两个结点的逻辑通道, 把现实控制数据传输协议的硬件和软件加到链路上就构成了数据链路 帧: 链…

第三章:数据链路层(一)

数据链路层基本概念 结点:主机、路由器 链路:网络中两个结点之间的物理通道,链路的传输介质主要有双绞线、光纤和微波。分为有线链路、无线链路。 数据链路:网络中两个结点之间的逻辑通道,把实现控制数据传输协议的硬件和软件加到链路上就构…

随机信号的特征—(自相关函数\互相关函数、协方差矩阵、相关矩阵\相关系数矩阵\相关系数)

在学习概率统计之前,我学习的都是确定的函数。概率统计讨论了一次取值时获得的值是不确定的,而随机过程讨论了不确定会发生哪个时间函数。 每个x(t)函数(样本函数)就是实际发生的一个表达式确定的函数,对每个x(t)的处理,都是与之…

使用 VPN 你一定要了解这几个真相!

关注公众号,回复“1024”获取2TB学习资源! 什么是 VPN? VPN 是一种隐藏您的Internet 协议 (IP) 地址的服务。这使您可以匿名浏览互联网,因为没有人可以将您的数据链接到您的IP地址。 要了解VPN的作用,您只需分解“虚拟…

苹果Mac电脑L2TP连接公司内部网络失败解决方案

苹果Mac电脑L2TP连接公司内部网络 苹果Mac电脑的L2TP连接公司内部网络失败是一种常见的问题,可能会导致用户无法访问公司内部资源。以下是一些可能的解决方案,可以尝试解决这个问题: 检查网络连接:首先要确保你的Mac电脑已经连接…

mac电脑升级Monterey12.1版之后L2TP连接公司内网后无法正常访问的问题解决

公司内网设置: L2TP,无共享密钥。 mac版本: macOS Monterey 版本12.6 审核人员看这里,文章中的VPN不是翻墙用的,是远程连接公司内网环境用的。 配置连接公司内容 1、系统偏好设置 → 网络; 2、点击左下角的…