news 2026/8/21 17:13:10

算法讲解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进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/20 21:22:08

软件系统稳定性保障:压力测试、负载测试与容量测试的深度辨析

在现代软件工程中&#xff0c;性能测试是确保系统可靠性和用户体验的关键环节。其中压力测试、负载测试与容量测试作为性能测试体系的重要分支&#xff0c;常被从业人员混淆或误用。本文针对软件测试从业者群体&#xff0c;系统解析三者的核心区别、实施场景及技术要点&#xf…

作者头像 李华
网站建设 2026/8/21 1:37:44

并发测试中的五大常见陷阱与破解之道

并发时代的质量挑战 随着分布式架构与微服务普及&#xff0c;并发测试从可选项目变为质量保障的生命线。然而&#xff0c;由于并发缺陷的隐蔽性、非确定性和高复杂度&#xff0c;测试人员常陷入“认知偏差-工具误用-环境失真”的循环陷阱。本文结合典型场景&#xff0c;揭示并…

作者头像 李华
网站建设 2026/8/21 12:06:52

亥姆霍兹线圈在‌化学领域的主要应用

亥姆霍兹线圈在化学领域的主要应用集中在利用其产生的均匀磁场环境来研究物质的磁性特性以及相关化学过程。具体应用包括&#xff1a;磁性材料特性测量&#xff1a;用于测量磁性材料的磁化曲线、磁滞回线等参数&#xff0c;帮助分析材料的磁学行为&#xff0c;这在材料化学和固…

作者头像 李华
网站建设 2026/8/20 6:00:47

连续时间下的概率预测

用自然常数 eee 丈量时间与风险 ——从丙烷罐泄漏看连续时间下的概率预测摘要&#xff1a; 在工程与生活中&#xff0c;我们常被问到&#xff1a;“如果这件事每年发生的概率是 5%&#xff0c;那么 10 年后它发生的概率是多少&#xff1f;”直觉告诉我们是 50%&#xff0c;但数…

作者头像 李华
网站建设 2026/8/20 15:25:35

什么是网络安全CTF有何意义?该如何入门?

什么是网络安全CTF?有何意义 &#xff1f;该如何入门 &#xff1f; 什么是网络安全CTF? CTF在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。它起源于1996年DEFCON&#xff0c;以代替之前通过互相发起真实攻击进行技术比拼的方式。发展至今&#x…

作者头像 李华
网站建设 2026/8/20 20:17:46

适合自学的网络安全基础技能“蓝宝书”:《CTF那些事儿》

CTF比赛是快速提升网络安全实战技能的重要途径&#xff0c;已成为各个行业选拔网络安全人才的通用方法。但是&#xff0c;本书作者在从事CTF培训的过程中&#xff0c;发现存在几个突出的问题&#xff1a; 1&#xff09;线下CTF比赛培训中存在严重的 “最后一公里”问题 &#…

作者头像 李华