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

article/2025/6/16 8:10:24

🌠作者:@TheMythWS.

🎆专栏:《JavaSE》

🎇座右铭:不走心的努力都是在敷衍自己,让自己所做的选择,熠熠发光。

目录

✨汉罗塔的介绍

图解游戏​

✨N层汉罗塔需移动的次数

✨汉罗塔的代码实现 

c语言实现:

运行结果:

 java语言实现:

运行结果:


✨汉罗塔的介绍

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

图解游戏

✨N层汉罗塔需移动的次数

✨汉罗塔的代码实现 

c语言实现:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
/*
思路1:*      将1~N层从A->B,     A为源,B为目的,C作为辅助 角色在变化*      等价于*      1、把1~1-N层从A->C,A为源,B为辅助,C为目的*      2、把第N层从A->B*      3、把1~N-1层从C->B,A为辅助,B为目的,C为源
思路2:*      将1~N层从A->C,     A为源,B作为辅助,C为目的 角色在变化*      等价于*      1、把1~1-N层从A->B,A为源,B为目的,C为辅助*      2、把第N层从A->C*      3、把1~N-1层从B->C,A为辅助,B作为源,C作为目的
*/
/*将N个盘子从source移动到target的路径的打印N      初始的N个从小到大的盘子,N是最大编号from   原始柱子to     目标柱子help   辅助的主子*/
//思路1
void printHannoiTower1(int n, char from[], char to[], char help[]) {//将1~N层从A->B,     A为源,B为目的,C作为辅助 角色在变化if (n == 1) {printf("move %d from %s to %s\n", n, from, to);//把第N层从A->Breturn;}else {printHannoiTower1(n - 1, from, help, to);//把1~1-N层从A->C,A为源,B为辅助,C为目的printf("move %d from %s to %s\n", n, from, to);//N可以顺利达到target,只需要1步完成printHannoiTower1(n - 1, help, to, from);//把1~N-1层从C->B,A为辅助,B为目的,C为源}
}
//思路2
void printHannoiTower2(int n, char from[], char help[], char to[]) {//将1~N层从A->C,     A为源,B作为辅助,C为目的 角色在变化if (n==1) {printf("move %d from %s to %s\n", n, from, to);//把第N层从A->Creturn;}else {printHannoiTower2(n - 1, from, to, help);//把1~1-N层从A->B,A为源,B为目的,C为辅助printf("move %d from %s to %s\n", n, from, to);//N可以顺利达到target,只需要1步完成printHannoiTower2(n - 1, help, from, to);//把1~N-1层从B->C,A为辅助,B作为源,C作为目的}
}
int main()
{printHannoiTower1(3, "A", "B", "C");printf("------------------\n");printHannoiTower2(3, "A", "B", "C");return 0;
}

运行结果:

 java语言实现:

package com.themyth.test;
/*** 找重复:*      1.找到一种划分方法*      2.找到递推公式或者等价转化*      都是父问题转化为求解子问题* 找变化的量:*      变化的量通常要作为参数* 找出口:*      根据参数变化的趋势,对边界进行控制,适时终止递归*思路1:*      将1~N层从A->B,     A为源,B为目的,C作为辅助 角色在变化*      等价于*      1、把1~1-N层从A->C,A为源,B为辅助,C为目的*      2、把第N层从A->B*      3、把1~N-1层从C->B,A为辅助,B为目的,C为源* 思路2:*      将1~N层从A->C,     A为源,B作为辅助,C为目的 角色在变化*      等价于*      1、把1~1-N层从A->B,A为源,B为目的,C为辅助*      2、把第N层从A->C*      3、把1~N-1层从B->C,A为辅助,B作为源,C作为目的**/
/*** 将N个盘子从source移动到target的路径的打印*N      初始的N个从小到大的盘子,N是最大编号from   原始柱子to     目标柱子help   辅助的主子*/
public class 汉诺塔 {public static void main(String[] args) {//思路1:C作为辅助printHannoiTower1(3,"A","B","C");System.out.println("----------------------------");//思路2:B作为辅助printHannoiTower2(3,"A","B","C");}//注意角色的变化private static void printHannoiTower1(int N, String from, String to, String help) {//    from源、to目的、help辅助if (N == 1) {System.out.println("move " + N + " from " + from + " to " + to);return;}else {printHannoiTower1(N-1,from,help,to);//   先把N-1个盘子移动到辅助空间上去,源、辅助、目的System.out.println("move " + N + " from " + from + " to " + to);//  N可以顺利达到target,只需要1步完成printHannoiTower1(N-1,help,to,from);// 让N-1从辅助空间回到源空间上,辅助、目的、源}}private static void printHannoiTower2(int N, String from, String help, String to) {//    from源、help辅助、to目的if (N == 1){System.out.println("move " + N + " from " + from + " to " + to);return;}else {printHannoiTower2(N-1,from,to,help);//   先把N-1个盘子移动到辅助空间上去,源、目的、辅助System.out.println("move " + N + " from " + from + " to " + to);//  N可以顺利达到target,只需要1步完成printHannoiTower2(N-1,help,from,to);// 让N-1从辅助空间回到源空间上,辅助、源、目的}}
}

运行结果:


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

相关文章

数据链路层 功能概述

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

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

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

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

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

19数据链路层的功能

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

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

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

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

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

数据链路层主要功能

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

传统网络安全设备-VPN介绍

前言 VPN设备介绍 定义 虚拟专用网络指的是在公用网络上建立专用网络的技术。之所以称为虚拟网主要是因为整个VPN网络的任意两个节点之间的连接并没有传统专网所需的端到端的物理链路&#xff0c;而是架构在公用网络服务商所提供的网络平台之上的逻辑网络&#xff0c;用户数…

US5M-ASEMI贴片快恢复二极管US5M

编辑&#xff1a;ll US5M-ASEMI贴片快恢复二极管US5M 型号&#xff1a;US5M 品牌&#xff1a;ASEMI 封装&#xff1a;SMC 电流&#xff1a;5A 电压&#xff1a;1000V 恢复时间&#xff1a;50ns 正向电压&#xff1a; 引脚数量&#xff1a;2 芯片个数&#xff1a;1 芯…

NXP/Freescale i.MX 计算机模块 - NXP i.MX 8Q、i.MX 6Q、i.MX 6D、i.MX 6DL、i.MX 6S、i.MX 6ULL、i.MX 7D 和 i.MX 7S

https://www.toradex.com/zh_cn/computer-on-modules/nxp-freescale-i.mx NXP/Freescale i.MX 计算机模块 NXP/Freescale i.MX 处理器是采用多核 ARM 的解决方案。Toradex 提供基于 NXP/Freescale i.MX 8、i.MX 6 和 i.MX 7 处理器的系统模块。 NXP i.MX 7 处理器是开发互联和 …

Semi-prime H-numbers

UVA11105 线性筛即可。 #include <iostream> #include <algorithm> #include <cmath> #include <vector> using namespace std;const int MAXN 1000001;bool IsNotHPrimer[MAXN 1];bool IsSemiHPrimer[MAXN 1];int sum[MAXN 1];vector<int>…

Mendix Marketplace 概述

Mendix Marketplace是一个充满活力的市场&#xff0c;它除了有开箱即用的完整示例应用程序&#xff0c;还有用来更快速构建定制化应用程序的各种组件 (连接器、小组件和模块)。在Mendix Marketplace中&#xff0c;您可以浏览所有内容&#xff0c;获取您想要的内容&#xff0c;并…