news 2026/1/8 17:01:47

算法讲解7:递归

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
算法讲解7:递归

递归:在数学与计算机中是指在函数的定义中只用函数自身的方法,在计算机科学中还额外指一种通过重复将问题分解为同类的子问题而解决问题的方法

1.递归出口(边界条件):找全递归终止条件

2.注意:写代码只考虑当前问题怎么解决,不分析下层问题怎么展开,不用去倒明白,就能处理当前就行

3.理解:画图,构思,找规律

4.例题:

题目描述

面试题 08.06. 汉诺塔问题

在经典汉诺塔问题中,有 3 根柱子及 N 个不同大小的穿孔圆盘,盘子可以滑入任意一根柱子。一开始,所有盘子自上而下按升序依次套在第一根柱子上(即每一个盘子只能放在更大的盘子上面)。移动圆盘时受到以下限制:
(1) 每次只能移动一个盘子;
(2) 盘子只能从柱子顶端滑出移到下一根柱子;
(3) 盘子只能叠在比它大的盘子上。

请编写程序,用栈将所有盘子从第一根柱子移到最后一根柱子。
你需要原地修改栈。

示例 1:
输入:A = [2, 1, 0],B = [],C = []
输出:C = [2, 1, 0]

第一步,先简化题意,就是把1柱的盘子移动到3柱,以2柱为媒介,归根到底,还是先放大盘子,但是1柱先动的是小盘子,所以通过媒介把小盘子放到下面,实现“让大盘子能比小盘子先动”,

第二步:那么这种题肯定无法用循环解决,我们用栈来充当柱子,再编写“根据不同请况盘子不同移动”的逻辑,我们需要一个函数,在调用的时候传入123三柱的栈,

那麽我们就知道一共需要做3个事情,设盘子数量aa,s起点,e终点,h媒介

1.把x-1个盘子通过媒介传到柱子,s->e->h

2.处理最后一个,s->e

3.把前面x-1个盘子移回正轨,h->s->e

代码

package 博客; import java.util.Stack; import java.util.Scanner; public class 递归 { public static void hannuota(int aa, Stack<Integer> s, Stack<Integer> e, Stack<Integer> h) //s起点,e终点,h媒介 { if(aa==1)//这是减到底了,写这个if的目的是里面可以放return { int p=s.pop(); e.add(p); return ; } hannuota(aa-1,s,h,e);//1,把aa-1个都处理,这一行就是只处理一次,处理完后调用自身,就是持续调用aa-1次 int d=s.pop();//2 处理最后一个,后面每一次都会运行这个,决定不同的是输入的值 e.add(d); hannuota(aa-1,h,e,s);//3 必须在最后,把前面的aa-1个放回正轨 } public static void main(String[] args) { Stack<Integer> a = new Stack<>(); Stack<Integer> b = new Stack<>(); Stack<Integer> c = new Stack<>(); Scanner sc=new Scanner(System.in); int n=sc.nextInt(); for(int i=0;i<n;i++) { a.add(sc.nextInt()); } int aa=a.size(); hannuota(aa,a,c,b); System.out.println(c.toString()); } }
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2025/12/20 18:27:19

震惊!选错云服务器代理商,你的业务将面临巨大风险!

震惊&#xff01;选错云服务器代理商&#xff0c;你的业务将面临巨大风险&#xff01;在数字化转型的浪潮中&#xff0c;云服务器已成为企业业务运行的基石。然而&#xff0c;许多企业在选择服务商时&#xff0c;往往只关注价格或品牌&#xff0c;却忽略了代理商这一关键环节。…

作者头像 李华
网站建设 2025/12/20 18:23:04

软件安装与卸载测试标准化流程指南

1 引言 安装与卸载作为用户接触软件的首末环节&#xff0c;其体验质量直接影响产品形象与用户留存。规范的安装/卸载测试流程是保障软件交付质量、提升用户满意度的关键环节。本规范旨在建立标准化测试框架&#xff0c;明确各阶段测试要点&#xff0c;为测试团队提供完整、可追…

作者头像 李华
网站建设 2026/1/2 13:26:47

书籍-《维特根斯坦文集》

《维特根斯坦文集》详细介绍 书籍基本信息 书名&#xff1a;维特根斯坦文集 作者&#xff1a;路德维希维特根斯坦&#xff08;Ludwig Wittgenstein&#xff0c;1889-1951年&#xff09; 成书时间&#xff1a;1953年&#xff08;遗作首次出版&#xff09;至现代完整版本 卷数&am…

作者头像 李华
网站建设 2026/1/5 17:07:22

20个渗透CTF练习平台资源(2025)

持续学习和实践&#xff0c;是每位安全从业者&#xff0c;尤其是红队成员&#xff0c;保持竞争力的关键。CTF (Capture The Flag&#xff0c;夺旗赛) 和渗透测试练习平台&#xff0c;为我们提供了磨练技能的绝佳环境。 紧接上次的30天渗透测试练习计划&#xff08;2025 第一部…

作者头像 李华
网站建设 2026/1/5 10:38:11

AI营销技术强的机构

AI营销技术强的机构&#xff1a;如何选择并利用优质AI营销服务随着人工智能技术的快速发展&#xff0c;越来越多的企业开始利用AI营销来提升品牌影响力和市场竞争力。然而&#xff0c;在众多提供AI营销技术的机构中&#xff0c;如何选择一家真正具备强大技术和专业能力的机构&a…

作者头像 李华
网站建设 2025/12/27 15:56:37

数据库测试数据的构造策略与全生命周期管理

测试数据在软件质量保障中的关键角色 在软件开发与测试生命周期中&#xff0c;数据库测试数据是验证功能完整性、性能稳定性及安全合规性的基石。尤其对于涉及复杂业务逻辑的系统&#xff0c;如金融、电商或企业级应用&#xff0c;低效或不准确的测试数据可能导致缺陷遗漏、回…

作者头像 李华