递归算法专题

题目: 

 


方法一:不讲武德法,注意:面试不能用!! 

代码: 

public void hanota(List<Integer> A, List<Integer> B, List<Integer> C) {//不讲伍德方法for(int x : A) C.add(x); }

方法二:

1.为什么可以用递归? 

先看汉诺塔如果解决: 

 从图中看出:

处理N(盘子数)为1时候,其他数量少的情况比如 N=2,都可以由  N=1  的方式得来,就好像套娃:这个N=3 问题 可以分为,N=2来解决。


为什么可以用递归总结:

大问题-->相同类型子问题

子问题-->相同类型子问题;

大问题:把全部盘子借助B移动到C

子问题:把n-1个盘子,借助任何一个盘子移动到C(往复操作) 


2.怎样用递归:

首先要从宏观方面考虑,这个递归函数可以为我解决问题,不用纠结。 

其次就是设计递归函数: 

步骤一设计函数头:

找出重复子问题:这里X,Y,Z分别对应,A,B,C三个柱子,n盘子个数

void dfs(x, y, z,int n) 

 

步骤二: 设计函数体:
只要关心某个子问题在做什么即可,就是图中的(1,2,3)。

dfs(x,z,y,n-1);        //借助中间的z柱子,把x柱子上的n-1个盘子放到,y柱子上

 z.add(x.remove(x.size()-1));        //把x柱子的第一个剩下的盘子,放到z柱子

 dfs(y,x,z,n-1);        //借助X柱子,把y柱子上的n-1个盘子,放到z柱子上

 

步骤三: 

找递归出口: 这里就是,N==1时,把x柱子的第一个的盘子,直接放到z柱子 


代码: 

public void hanota(List<Integer> A, List<Integer> B, List<Integer> C) {dfs(A,B,C,A.size());}private void dfs(List<Integer> x, List<Integer> y, List<Integer> z,int n){//递归出口,只有一个盘子的时候,把x柱子上的盘子直接放到z柱子上if(n == 1) {z.add(x.remove(x.size()-1));return;}//任意一个子问题的具体步骤dfs(x,z,y,n-1);//借助中间的z柱子,把x柱子上的n-1个盘子放到,y柱子上z.add(x.remove(x.size()-1));//把x柱子的第一个剩下的盘子,放到z柱子dfs(y,x,z,n-1);//借助X柱子,把y柱子上的n-1个盘子,放到z柱子上}

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

验证双随机矩阵(doubly stochastic matrix) 满足C(P)=C(P^T)

验证双随机矩阵(doubly stochastic matrix) 满足C( P P P)C(P T ^T T) 双随机矩阵&#xff1a; 在数学中&#xff0c;一个双随机矩阵&#xff08;doubly stochastic matrix&#xff09;是一个满足以下条件的矩阵&#xff1a; 非负矩阵&#xff1a;矩阵中的每个元素都是非负的…

海外媒体发稿:中东地区阿拉伯邮报Arab Post新闻媒体宣发

​今天&#xff0c;我们要特别聚焦于中东地区的知名新闻媒体——阿拉伯邮报&#xff08;Arab Post&#xff09;&#xff0c;探讨其在海内外媒体宣发领域的重要性和影响力。 阿拉伯邮报作为一家备受关注的新闻媒体&#xff0c;涵盖了新闻、政治、娱乐和观点等多个领域&#xff…

Mysql-DQL语句

文章目录 DQL 语句简单查询查询表所有数据查询指定列 别名查询清除重复值查询结果参与运算 &#x1f3e1;作者主页&#xff1a;点击&#xff01; &#x1f916;Mysql专栏&#xff1a;点击&#xff01; ⏰️创作时间&#xff1a;2024年11月16日11点39分 DQL 语句 DQL 语句数据…

ERP软件市场展望:2025年的规模与趋势深度解析-亿发

随着数字化转型的深入&#xff0c;ERP软件市场正迎来新一轮的增长。预计到2025年&#xff0c;全球ERP软件市场规模将持续扩大&#xff0c;中国市场也将保持强劲的增长势头。 市场规模增长 根据市场研究报告&#xff0c;全球ERP软件市场在2019年已超过3,000亿美元&#xff0c;预…

推荐15个2024最新精选wordpress模板

以下是推荐的15个2024年最新精选WordPress模板&#xff0c;轻量级且SEO优化良好&#xff0c;适合需要高性能网站的用户。中文wordpress模板适合搭建企业官网使用。英文wordpress模板&#xff0c;适合B2C网站搭建&#xff0c;功能强大且兼容性好&#xff0c;是许多专业外贸网站的…

LLMs 损失函数篇

LLMs 损失函数篇 一、介绍一下 KL 散度 KL&#xff08;Kullback-Leibler&#xff09;散度衡量了两个概率分布之间的差异。公式为&#xff1a; D K L ( P ∥ Q ) ∑ P ( x ) log ⁡ P ( x ) Q ( x ) D_{KL}(P \| Q) \sum P(x) \log \frac{P(x)}{Q(x)} DKL​(P∥Q)∑P(x)logQ…

智慧社区管理系统提升物业服务效率与居民生活质量

内容概要 智慧社区管理系统正变得越来越重要&#xff0c;它为现代物业管理提供了全新的视角和方法。通过结合先进的技术&#xff0c;这套系统帮助物业公司优化其服务流程&#xff0c;使服务效率得到显著提升。想象一下&#xff0c;业主只需在手机上轻轻一点&#xff0c;就能完…

共享门店模式:创新零售的新篇章

​在消费升级和数字化转型的双重浪潮下&#xff0c;传统零售业正面临前所未有的挑战与机遇。其中&#xff0c;共享门店模式作为一种创新的商业模式&#xff0c;正逐渐成为实体店铺应对电商冲击、提升运营效率和市场竞争力的重要途径。本文将深入解析共享门店模式的内涵、优势、…

基于SpringBoot的旅游网站(程序+数据库+报告)

基于SpringBoot的旅游网站&#xff0c;系统包含两种角色&#xff1a;管理员、用户,系统分为前台和后台两大模块&#xff0c;主要功能如下。 【前台】&#xff1a; - 首页&#xff1a;展示旅游网站的核心内容&#xff0c;包括推荐的旅游线路、最新的旅游资讯等。 - 旅游线路&am…

shell编程--永久环境变量和字符串显位

环境变量 echo $HOME 在终端输出后会显示家目录有个root变量 我们会提出个疑问为什么平时我们在终端输入sl 或者which等等命令会输出一些内容呢&#xff0c;这是因为这些命令都有对应的环境变量。 我们查看一下环境变量 在终端输入&#xff1a; echo $PATH 我们看一下输出…

element ui 搜索框中搜索关键字标红展示

示例如图 el-select上绑定remote-method属性 <el-select v-model"checkForm.type" filterable remote reserve-keyword :remote-method"remoteMethod" :loading"loading"><el-option v-for"item in options" :key"ite…

华为Mate 70临近上市:代理IP与抢购攻略

随着科技的飞速发展&#xff0c;智能手机已经成为我们日常生活中不可或缺的一部分。而在众多智能手机品牌中&#xff0c;华为一直以其卓越的技术和创新力引领着行业的发展。近日&#xff0c;华为Mate 70系列手机的发布会正式定档在11月26日&#xff0c;这一消息引发了众多科技爱…

《Java核心技术 卷I》用户界面中首选项API

首选项API 在桌面程序中&#xff0c;通常都会存储用户首选项&#xff0c;如用户最后处理的文件、窗口的最后位置等。 利用Properties类可以很容易的加载和保存程序的配置信息&#xff0c;但有以下缺点&#xff1a; 有些操作系统没有主目录概念&#xff0c;很难为匹配文件找到…

win10海量文件拷贝的方法

文章目录 win10海量文件拷贝的方法概述笔记备注拷贝失败的情况记录杀毒软件拦截 是否要开启"发生错误继续"的选项还是不要开启"完美校验"可以勾选"错误时继续"选项"完美校验"太占用时间了备注日志是混合编码的总结END win10海量文件拷…

Linux——环境基础开发工具使用1

目录 1.软件包管理器 1.1 操作生态系统 1.2 yum具体操作 2.编辑器Vim 2.1 vim初识 2.2 vim的基本概念 2.3 vim的基本操作 2.3.1 命令模式 2.3.2 插入模式 2.3.3 底行模式 2.3.4 补充 3.编译器gcc/g 3.1 背景知识 3.1.1 预处理&#xff08;进行宏替换/去注释/…

自定义菜单栏实现点击添加按钮打开渲染进程的Dialog.vue模态框

实现思路&#xff1a;渲染进程页面初始化后就通知主进程&#xff0c;然后把event事件保存在该js文件外&#xff0c;当点击添加时因为是在其他位置&#xff0c;所以才要这样使用。然后点击添加后由主进程主动向渲染进程传递参数通知要做的操作。 代码如下&#xff1a; // 第一步…

[vulnhub] Chronos: 1

https://www.vulnhub.com/entry/chronos-1,735/ ps&#xff1a;该靶机需要在hosts文件添加chronos.local记录&#xff0c;在官方地址上没有写 主机发现端口扫描 使用nmap扫描网段类存活主机 因为靶机是我最后添加的&#xff0c;所以靶机IP是7 &#xff0c;kali是10 nmap -sP 1…

基于SSM的餐饮管理系统的设计与实现

【Java】基于SSM的餐饮管理系统的设计与实现 点击以下链接获取源码&#xff1a; https://download.csdn.net/download/qq_64505944/90001206?spm1001.2014.3001.5503 2、技术框架&#xff1a;Jdk1.8&#xff0c;SSM&#xff0c;Tomcat&#xff0c;Mysql5&#xff0c;Jsp 3、压…

数据结构之集合框架

文章目录 1.什么是集合框架2. 集合框架的重要性&#xff08;了解&#xff09;3. 背后涉及到的数据结构以及算法3.1 什么是数据结构3.2 相关Java知识3.3 什么是算法 1.什么是集合框架 Java 集合框架 Java Collection Framework &#xff0c;又被称为容器 container &#xff0c…

【大语言模型】ACL2024论文-14 任务:不可能的语言模型

【大语言模型】ACL2024论文-14 任务&#xff1a;不可能的语言模型 目录 文章目录 【大语言模型】ACL2024论文-14 任务&#xff1a;不可能的语言模型目录摘要研究背景问题与挑战如何解决创新点算法模型实验效果重要数据与结论推荐阅读指数和推荐理由 后记 任务&#xff1a;不可能…