递归:汉诺塔问题III

题目

题目描述

约 19 世纪末,在欧洲的商店中出售一种智力玩具:在一块铜板上有三根杆,最左边的杆自上而下、由小到大顺序串着由 64 个圆盘构成的塔。目的是将最左边杆上的圆盘全部移到右边的杆上,条件是一次只能移动一个圆盘,并且不允许大圆盘放在小圆盘的上面。现在我们改变这个游戏的玩法:不允许直接从最左(右)边移动到最右(左)边(每次移动一定是移到中间杆或从中间杆移出),也不允许大圆盘放到小圆盘的上面。Daisy 已经做过原来的汉诺塔问题和汉诺塔 Ⅱ问题,但碰到这个问题时,她想了很久都无法解决。请你帮助她。现在有~个圆盘,她至少需要多少次移动才能把这些圆盘从最左边移到最右边?

输入

包含多组数据,每次输入一个N值(1≤N≤35)。 

输出

对于每组数据,输出移动最小的次数。

样例输入

1

3

12

 样例输出

2

26

531440

解答

分析 

汉诺塔问题历来被认为是理解递归最好的例题,凡是涉及递归的教科书,其教学用例十有八九会采用汉诺塔。这里给出汉诺塔问题的一个变种,旨在通过该问题让读者更好地理解递归策略。
与原始的汉诺塔问题不同,该变种对圆盘的移动做了更多的限制,即每次只允许将圆盘移到中间杆上或从中间杆上移出,即不允许直接将圆盘从第一根杆上移到第三根杆上,或直接将圆盘从第三根杆上移到第一根杆上。-在这种情况下,考虑第一根杆上移动N个圆盘到第三根杆上。为了将初始时最底下、最大的圆盘移动到第三根杆上,首先需要将其上的N-1个圆盘移动到第三根杆上,而这恰好等价于从第一根杆上移动N-1个圆盘到第三根杆上。这一移动完成后,第一根杆上仅剩下最大的圆盘,第二根杆上为空,第三根杆上按顺序摆放着N-1个圆盘。将最大的圆盘移动到此时没有任何圆盘的第二根杆上,并再次将N-1个圆盘从第三根杆上移动到第一根杆上,此时仍然需要N-1个圆盘从第一根杆上移动到第三根杆上所需的移动次数(第一根杆和第三根杆等价),这一移动完成后,将最大的圆盘移到第三根杆上,最后将N-1个圆盘从第一根杆上移动到第三根杆上。若从第一根杆上移动 N 个圆盘到第三根杆上需要 F[N]次移动,那么综上所述 F[N]的组成方式如下:先移动N-1个圆盘到第三根杆上需要 F[N-11次移动,然后将最大的圆盘移动到中间杆上需要1次移动,再将N-1个圆盘移动回第一根杆上同样需要 F[N-1]次移动,移动最大的盘子到第三根杆上需要1次移动,最后将N-1个圆盘移动到第三根杆上需要F[N-1]次移动,于是便有了F[N]=3F[N-1]+2。也就是说,从第一根杆上移动N个圆盘到第三根杆上,需要三次从第一根杆上移动N-1个圆盘到第三根杆上,外加两次对最大圆盘的移动。这样就可以将移动 N个圆盘的问题转换为问题相同但规模更小的移动N-1个圆盘的问题。于是,满足了递归的第一个条件。
同时,要确定该问题的递归出口。当N为1时,即从第一根杆上移动一个盘子到第三根杆上,所需的移动次数显而易见为 2。移动一个盘子所需次数是最底层的子问题,该子问题不可继续分解且易于求解。这便是递归的出口,于是满足了递归的第二个条件。

代码

import java.util.Scanner;/*** 汉诺塔问题III*/
public class test10 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();System.out.println(hanoi(n));}public static int hanoi(int n){if(n == 1){return 2;}else {return 3*hanoi(n-1) + 2;}}
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/855085.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文理清GO语言日志库实现开发项目中的日志功能(rotatelogs/zap分析)

一文理清GO语言日志库实现开发项目中的日志功能(rotatelogs/zap分析) rotatelogs rotatelogs 是一个用于管理日志文件的 Go 语言库,它提供了自动轮换、压缩和删除旧日志文件的功能。这个库可以帮助你更好地管理和维护你的应用程序日志。要使…

《HTML趣味编程》专栏内资源的下载链接

目录 关于专栏 博主简介 专栏内资源的下载链接 写在后面 关于专栏 本专栏将持续更新,至少含有30个案例,后续随着案例的增加可能会涨价,欢迎大家尽早订阅!(订阅后可查看专栏内所有文章,并且可以下载专栏内的所有资源) 博主简介 ⭐ 2024年百度文心智能体大赛 Top1⭐…

[Qt] Qt Creator 编译输出乱码,问题页中的报错、警告内容,编译输出乱码

确保文件编码为"UTF-8","如果编码是UTF-8则添加",如下图: 设置IDE环境语言跟随系统语言,Text codec for tools: "System" 瑞斯拜

frp安装与配置

个人从网上杂乱的信息中学习、试错,记录自己成功配置的方法,避免遗忘 一、frp的下载 因目前无法下载,仅保留下载方法,版本号根据实际修改,目前使用0.54版,不同系统下载不同文件。 wget https://github.c…

docker安装fastdfs详细教程

目录 一、前言 二、安装步骤 1、搜索fastdfs镜像 2、拉取镜像,这里我们用delron/fastdfs安装 3、运行镜像 三.查看或修改配置文件 1、进入storage容器 2、查看 storage.conf 配置文件 3、查看nginx配置文件 四、测试文件上传 一、前言 fastdfs是一个开源的分布式文件系…

AI在医学中神奇应用

2022年11月30日,可能将成为一个改变人类历史的日子——美国人工智能开发机构OpenAI推出了聊天机器人ChatGPT-3.5,将人工智能的发展推向了一个新的高度。2023年11月7日,OpenAI首届开发者大会被称为“科技界的春晚”,吸引了全球广大…

空气质量预报模式系统WRF-CMAQ

空气污染问题日益受到各级政府以及社会公众的高度重视,从实时的数据监测公布到空气质量数值预报及预报产品的发布,我国在空气质量监测和预报方面取得了一定进展。随着计算机技术的高速发展、空气污染监测手段的提高和人们对大气物理化学过程认识的深入&a…

pdfFactory虚拟打印机软件下载-pdfFactory虚拟打印机官方最新版下载附加详细安装步骤

pdffactory是一款办公软件,帮助用户更好的进行文件处理,轻松查询使用,不用担心故障的问题,而且打印速度快,效率高,保障用户日常打印轻松。 安 装 包 获 取 地 址: FinePrint-安装包 &#xff1…

OSPF开销、协议优先级、定时器(华为)

#交换设备 OSPF开销值 如果没有定义OSPF接口的开销值,OSPF会根据该接口的带宽自动计算其开销值。 计算公式: 接口开销 带宽参考值 / 接口带宽 (取整数部分,结果小于1时取1)通过改变带宽参考值可以间接改变接口的开…

苍穹外卖---导入接口文档

一、前后端分离开发流程 第一步:定义接口,确定接口的路径、请求方式、传入参数、返回参数。 第二步:前端开发人员和后端开发人员并行开发,同时,也可自测。 第三步:前后端人员进行连调测试。 第四步&…

Spring IOC(控制反转)和DI(依赖注入)在Spring框架中的核心作用

1.1 IoC(控制反转)和DI(依赖注入)在Spring框架中的核心作用 IoC(控制反转): IoC是一种编程思想,其目标是将对象的创建和依赖关系的维护从应用程序代码中分离出来,交给一…

Postman接口测试之postman设置接口关联,实现参数化

🍅 视频学习:文末有免费的配套视频可观看 🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 postman设置接口关联 在实际的接口测试中,后一个接口经常需要用到前一个接口返回的结…

beego项目发布到linux

beego项目发布到linux 1.打包应用程序2.上传压缩包(beego-blog.tar.gz)到服务器指定目录3.解压缩包4.先进入项目目录5.添加执行权限6.后台运行beego程序7.nginx配置域名及反向代理8.浏览器访问域名查看网站 1.打包应用程序 bee pack -be GOOSlinux2.上传…

PAT B1012. 数字分类

题目描述 给定一系列正整数,请按要求对数字进行分类,并输出以下五类数字: Al-能被5整除的数字中所有偶数的和; A2将被5除后余1的数字按给出顺序进行交错求和,即计算n1-n2n3-n4…; A3被5除后余2的数字的个数; A4被5除后余3的数字的平均数,精确到小数点后一位; A5被5除后余4的…

苹果电脑下载vite包错

苹果电脑下载vite包错/Users/lili/.npm/_cacache/index-v5/c5/50/b451703d03b3802b9ee6b7ff2b0bde4de7f26830eb52c904d6911c137cf8包错解决方式 解决方式:sudo chown -R 501:20 "/Users/wangxin/.npm"

PCI-E 5.0固态硬盘温度价格「双降」,速度近15GB/s

都 2024 年了,相信各位同学对固态硬盘都不陌生了吧。 随着技术的不断更新迭代,固态硬盘接口速率如今最高已经来到了 PCI-e 5.0 了。 其实这不算什么新技术了,早在2023年5月美光就上市了全球首款 PCI-e 5.0 固态硬盘, 英睿达 T700…

Python学习打卡:day09

day9 笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了 目录 day964、字典课后习题65、5类数据容器的总结对比数据容器分类数据容器特点对比 66、数据容器的通用操作遍历统计len、max 和 min 转换list(容器)、…

算法基础精选题单 枚举 (合适的枚举顺序+合适的枚举内容+前缀和和差分) (个人题解)

前言: 今日第一份题解,题目主要是于枚举有关,枚举算是算法题中较为简单的部分了(对我来说还是有些难想的),话不多说,见下。 正文: 题单:237题】算法基础精选题单_ACM竞赛…

概念描述——TCP/IP模型中的两个重要分界线

TCP/IP模型中的两个重要分界线 协议的层次概念包含了两个也许不太明显的分界线,一个是协议地址分界线,区分出高层与低层寻址操作;另一个是操作系统分界线,它把系统与应用程序区分开来。 高层协议地址界限 当我们看到TCP/P软件的…

el-radio单选框的选中与取消

需求是有一个单选框&#xff0c;点击选中&#xff0c;再次点击取消。 第一次写的时候代码如下&#xff1a; <el-radio-group v-model"keyForm.highlight"><el-radio:value"true"click"handleClick">是</el-radio> </el-r…