递归问题(一)

所谓递归问题,可以分成两部分来理解:一是基本问题,也可以称之为原始问题,比较好解决;二是后续问题,比较复杂,但是和原始问题比较类似,可以调用自身的一个新的副本去解决它。

最简单的可以归为递归问题的就是阶乘,1的阶乘我们知道是1,2的阶乘为2*1=2*1!,而3的阶乘又是3*2!...这样我们就能够知道如何用递归去实现n的阶乘了。

public class Factorial { public static int factorial (int n){ int result = 0; if (n <= 1){ result = 1; } else if (n > 1){ result = n * factorial (n-1); } return result; } public static void main (String args[]){ for (int i=0; i<10; i++) System.out.print(factorial (i) +" "); } }

输出:

1 1 2 6 24 120 720 5040 40320 362880

当然了这是最简单的,也是最好理解的递归例子,但是它揭示了递归的实质:将复杂问题递归为简单问题解决...

我们再来看看稍微复杂点的,也比较有意思,汉诺塔问题:有1,2,3这3个柱子,1号柱子上有n个盘子(盘子由小到大地串在上面,且小盘子永远不能在大盘子下面),以2号柱子为临时存放地,最终将n个盘子移到3号柱子上。将这个问题分析为递归问题,分解出以下三点:

1. 从1号柱子移动n-1个盘子到2号柱子,3号柱子为临时存放点;

2. 从1号柱子将第n个盘子移到3号柱子;

3. 将n-1个柱子从2号柱子移到3号柱子,1号柱子为临时存放点。

请看代码:

public class Hanoi { public static void hanoi (int movingPans, String sourcePillar, String targetPillar, String tempPillar){ if (movingPans == 1){ movePans (1, sourcePillar, targetPillar); } else{ hanoi(movingPans-1, sourcePillar, tempPillar, targetPillar); movePans (movingPans, sourcePillar, targetPillar); hanoi(movingPans-1, tempPillar, targetPillar, sourcePillar); } } public static void movePans (int panNum, String sourcePillar, String targetPillar){ System.out.println("Move "+ panNum +" form "+ sourcePillar +"# to "+ targetPillar +"#"); } public static void main(String args[]){ System.out.println("3个盘子的汉诺塔问题:"); hanoi(3, "1", "3", "2"); System.out.println("5个盘子的汉诺塔问题:"); hanoi(5, "1", "3", "2"); } }

输出:

3个盘子的汉诺塔问题: Move 1 form 1# to 3# Move 2 form 1# to 2# Move 1 form 3# to 2# Move 3 form 1# to 3# Move 1 form 2# to 1# Move 2 form 2# to 3# Move 1 form 1# to 3# 5个盘子的汉诺塔问题: Move 1 form 1# to 3# Move 2 form 1# to 2# Move 1 form 3# to 2# Move 3 form 1# to 3# Move 1 form 2# to 1# Move 2 form 2# to 3# Move 1 form 1# to 3# Move 4 form 1# to 2# Move 1 form 3# to 2# Move 2 form 3# to 1# Move 1 form 2# to 1# Move 3 form 3# to 2# Move 1 form 1# to 3# Move 2 form 1# to 2# Move 1 form 3# to 2# Move 5 form 1# to 3# Move 1 form 2# to 1# Move 2 form 2# to 3# Move 1 form 1# to 3# Move 3 form 2# to 1# Move 1 form 3# to 2# Move 2 form 3# to 1# Move 1 form 2# to 1# Move 4 form 2# to 3# Move 1 form 1# to 3# Move 2 form 1# to 2# Move 1 form 3# to 2# Move 3 form 1# to 3# Move 1 form 2# to 1# Move 2 form 2# to 3# Move 1 form 1# to 3#

请看本篇blog的续集:《递归问题二》。

【评估多目标跟踪方法】9个高度敏捷目标在编队中的轨迹和测量研究(Matlab代码实现)内容概要:本文围绕“评估多目标跟踪方法”,重点研究9个高度敏捷目标在编队飞行中的轨迹生成与测量过程,并提供完整的Matlab代码实现。文中详细模拟了目标的动态行为、运动约束及编队结构,通过仿真获取目标的状态信息与观测数据,用于验证和比较不同多目标跟踪算法的性能。研究内容涵盖轨迹建模、噪声处理、传感器测量模拟以及数据可视化等关键技术环节,旨在为雷达、无人机编队、自动驾驶等领域的多目标跟踪系统提供可复现的测试基准。; 适合人群:具备定Matlab编程基础,从事控制工程、自动化、航空航天、智能交通或人工智能等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①用于多目标跟踪算法(如卡尔曼滤波、粒子滤波、GM-CPHD等)的性能评估与对比实验;②作为无人机编队、空中交通监控等应用场景下的轨迹仿真与传感器数据分析的教学与研究平台;③支持对高度机动目标在复杂编队下的可观测性与跟踪精度进行深入分析。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注轨迹生成逻辑与测量模型构建部分,可通过修改目标数量、运动参数或噪声水平来拓展实验场景,进步提升对多目标跟踪系统设计与评估的理解。
本软件实现了种基于时域有限差分法结合时间反转算法的微波成像技术,旨在应用于乳腺癌的早期筛查。其核心流程分为三个主要步骤:数据采集、信号处理与三维可视化。 首先,用户需分别执行“WithTumor.m”与“WithoutTumor.m”两个脚本。这两个程序将在模拟生成的三维生物组织环境中进行电磁仿真,分别采集包含肿瘤模型与不包含肿瘤模型的场景下的原始场数据。所获取的数据将自动存储为“withtumor.mat”与“withouttumor.mat”两个数据文件。 随后,运行主算法脚本“TR.m”。该程序将加载上述两组数据,并实施时间反转算法。算法的具体过程是:提取两组仿真信号之间的差异成分,通过组专门设计的数字滤波器对差异信号进行增强与净化处理,随后在数值模拟的同组织环境中进行时间反向的电磁波传播计算。 在算法迭代计算过程中,系统会按预设的周期(每n次迭代)自动生成并显示三维模拟空间内特定二维切面的电场强度分布图。通过对比观察这些动态更新的二维场分布图像,用户有望直观地识别出由肿瘤组织引起的异常电磁散射特征,从而实现病灶的视觉定位。 关于软件的具体配置要求、参数设置方法以及更深入的技术细节,请参阅软件包内附的说明文档。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值