关于java的递归

Java 递归 在上节末尾提到递归,只是对TA做了简单的概述,接下来再对TA进行详细介绍TA的用途! 文章目录Java 递归Java递归求阶乘Java递归快速排序递归阶加 Java 递归 一个方法体内调用它自身,就是方法递归。相当于一种隐式循环,它会重复执行某一段代码,但这种重复执行无需循环控制!简单理解就是自己调用自己! Java递归求阶乘 import java.util.Scanner; public ... 阅读详情

关于java的递归

本篇文章来了解以下java方法的最后一个基础知识,递归,递归是一个非常简便的东西,也是一个非常危险的东西🤣下面向大家仔细说明以下什么是递归,以及递归的注意事项,实现逻辑等。

递归

  • 我们见到过A方法调用B方法,main()方法就是最好的例子。
public class Demo
{
    public static void main(String[] args)
    {
        test();//main方法调用我们定义的方法,A调用B
    }
    
    //随便定义一个方法
    public static void test()
    {
        System.out.println("Hello");
    }
}
  • 递归就是,A调用A,自己调用自己!
  • 但是递归不是一个好的用法,我们下面举例说明一下。
public class Demo
{
    public static void main(String[] args)
    {
        Demo demo =new Demo();
        demo.test();
    }
    
    //自己调用了自己
    public void test()
    {
        test();
    }
}

我们上述的代码中,test方法自己调用了自己,然后再用main方法去调用一次,我们执行一下代码,就会发现如下报错

Exception in thread "main" java.lang.StackOverflowError//栈溢出异常
	at method.Demo.test(Demo.java:12)
	at method.Demo.test(Demo.java:12)
	at method.Demo.test(Demo.java:12)
	at method.Demo.test(Demo.java:12)
.......

我们会发现,报错栈溢出了,这是因为,反复调用自己,没有终止标记,陷入了一个死循环中,导致栈溢出,什么是栈我们在下文中说明一下,所以,递归需要注意递归结构!

  • 利用递归可以用简单的程序来解决一些复杂的问题。它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。
  • 递归的能力在于用有限的语句来定义对象的无限集合。

递归的结构

  • 递归头:什么时候不调用自己,如果没有头,就会死循环,也就是结束终止标记。
  • 递归体:什么时候要调用自己。

下面用实现阶乘的方法来介绍一下递归的头和体。

public class Demo
{
    public static void main(String[] args)
    {
		System.out.println(sum(5));
    }
    
    //阶乘
    //1! 1
    //2! 2*1
    //5! 5*4*3*2*1
    public static int sum(int n)
    {
        if(n==1)
        {
            return 1;
        }
        else
        {
            return n*sum(n-1);//调用自己,每次减少1
        }
    }
}

我们执行一下代码,发现结果是

120

进程结束.....

我们实现出来,但是可能不太好理解,我们将它分解一下。

假如我们输入的数字是2,实参是2,传到方法中的时候先进行判断,然后进入else,执行2*sum(1),sum(1)的返回结果是1。

我们输入的数字是5

第一步,判断,不满足,返回 5 * sum(4)

到这就可以理解为我们输入了4

第二步,判断,不满足,返回 4 * sum(3)

到这就可以理解为我们输入了3

第三步,判断,不满足,返回 3 * sum(2)

到这就可以理解为我们输入了2

第四步,判断,不满足,返回 2 * sum(1)

到这就可以理解为我们输入了2

第五步,判断,满足,返回1

所以,最终的输出结果,5 * 4 * 3 * 2 * 1,结果为120😀

  • 因为1的阶乘是1本身,所以到1的时候,就结束自身调用了,这个就叫递归头,专业名称叫边界条件。
  • 下面的自身调用,就是递归体,叫返回阶段。

栈

  • 递归虽然有的时候,可以实现一些复杂运算的代码,但是不建议使用!
  • java中有栈机制的说法,就好比一个容器,main方法调用一次递归方法,就会堆积一层,直到程序执行完,全部释放。
  • 所以,过度使用递归,会导致程序深度过大,内存占用过高,系统崩溃。
  • 我们就刚刚的阶乘来举例说明一下。
public class Demo
{
    public static void main(String[] args)
    {
		System.out.println(sum(100000));//这里输入10万
    }
    
    //阶乘
    //1! 1
    //2! 2*1
    //5! 5*4*3*2*1
    public static int sum(int n)
    {
        if(n==1)
        {
            return 1;
        }
        else
        {
            return n*sum(n-1);//调用自己,每次减少1
        }
    }
}

我们在传参的时候,传一个10万,让它去进行阶乘计算,这样的话就太过于堆积,不断的累加,会让内存无法释放,直到卡死🥲

所以我们说,递归适合用于一些情况下,就相当于循环方法,要有度,尽量不要使用在关键的代码中,向这种十万的阶乘,我们可以考虑用别的算法去实现😀。

JAVA递归DEMO NULL 博文链接:https://yr512656630.iteye.com/blog/1171335 立即下载

相关推荐

Open5GS实战指南:Ubuntu 22.04环境下的5G核心网快速部署

本文提供Open5GS在Ubuntu 22.04环境下部署5G核心网的实战指南,涵盖环境准备、MongoDB配置、核心组件安装、WebUI部署及网络调优等关键步骤。通过详细的安装教程和常见问题解决方案,帮助开发者快速搭建开源5G核心网测试环境。

weixin_29202213的博客 537

递归,demo

【代码】递归,demo。

MXqihang的博客 307

从零开始理解异构算力调度:全国一体化算力算网平台实战解析

本文深入解析了异构算力调度技术在全国一体化算力算网平台中的实战应用。通过资源抽象层设计、动态感知引擎和跨云调度算法,实现AI训练任务的高效资源分配,显著提升计算效率并降低成本。特别针对GPU等异构算力的智能调度方案,为多云协同环境下的AI开发提供实用指南。

weixin_28730927的博客 333

Java之递归算法的理解与Demo(包含return的坑)

在平时的工作或者面试中,大家一说到“递归”,我们会想到“自己调自己”,确实,程序调用自身的编程技巧称为递归(recursion)。但是在真正编写递归程序的时候一定要具备三个条件: 1.终结条件(满足边界条件时,停止调用自身) 2.递归条件(满足递归条件时,继续调用自身) 3.基本值(例如:下面demo中基本值就是最后一次调用自身时current的值) public static void...

Peacock__的博客 3732

SAP CO实战:如何用KKA2/CJ88结果分析码搞定项目收入成本匹配(附真实案例)

本文深入探讨了SAP CO模块中KKA2和CJ88结果分析码在项目收入成本匹配中的高阶应用。通过真实案例解析,详细介绍了这两种分析码在分阶段收入确认和终验法项目中的配置技巧与实战经验,帮助财务人员高效解决复杂业务场景下的财务数据处理难题。

weixin_29230773的博客 166

FFmpeg HDR视频转SDR视频命令

之前蓝光盘电影多是AVC 1080p 8bit SDR格式视频,近两年4K电影流行,下载的蓝光电影多是HEVC 2160p 10bit HDR视频格式。 ffprobe查看有如下属性: # 10bit HDR Stream #0:0(eng): Video: hevc (Main 10), yuv420p10le(tv, bt2020nc/bt2020/smpte2084), 3840x2160 [SAR 1:1 DAR 16:9], 23.98 fps, 23.98 tbr, 1k tbn, 23.98

彼此当年少,莫负好时光 1万+

java递归

计算机科学中,递归是一种解决计算问题的方法(但他只是方法之一),其中解决方案取决于同一类问题的更小子集(方法自己调用方法自己,而方法里面调用别的方法,就不是解决同一类问题了)

风止的博客 3811

YOLOv8 置信度阈值 (conf) 和 IoU 阈值 (iou) 详解:如何平衡漏检与误检?

摘要 本文深入探讨了YOLOv8目标检测模型中两个关键参数——置信度阈值(conf)和IoU阈值(iou)的核心作用。文章从目标检测的基础概念出发,解释了置信度分数反映模型预测可靠性,IoU衡量预测框重叠程度。重点剖析了非极大值抑制(NMS)机制如何通过这两个阈值进行预测框筛选:置信度阈值作为初筛门槛,IoU阈值决定重叠框的取舍。通过生动比喻和可视化图表,阐述了合理调节这两个参数能有效平衡误检与漏检问题,是优化YOLOv8模型实际表现的重要技巧。全文以实践为导向,帮助开发者掌握成为"调参大师&qu

深耕 Vue 生态与 JS/TS 技术,聚焦组件封装、响应式原理、TS 类型设计,解析工程化配置与性能优化方案。同时分享 YOLOv8 目标检测实战、AI 大模型面试核心考点,以代码实例拆解技术实现与业务解法。 1242

【Java】使用递归的方法获取层级关系数据demo

【代码】【Java】使用递归的方法获取层级关系数据demo。

like_start的博客 1207

手把手教你学Simulink--基于电能质量与无功补偿的场景实例:统一电能质量调节器(UPQC)的联合控制仿真

在现代电力系统中,电能质量问题有源电力滤波器(APF)→ 治理谐波与无功动态电压恢复器(DVR)→ 补偿电压暂降/暂升静止无功发生器(SVG)→ 无功补偿与电压支撑而统一电能质量调节器(Unified Power Quality Conditioner, UPQC)是一种集串联补偿与并联补偿于一体的全能型电能质量治理装置✅ 电压类问题:暂降、暂升、不平衡、闪变✅ 电流类问题:谐波、无功、三相不平衡✅ 实现双向有功交换(储能型)串联单元(DVR功能):串联于线路,控制电源侧电压质量并联单元。

MHD0815的博客 236

YOLOv8改进有效系列目录 | 包含卷积、主干、检测头、注意力机制、Neck上百种创新机制

Hello,各位读者们好,本专栏自开设两个月以来已经更新改进教程120+余篇其中包含C2f、主干、检测头、注意力机制、Neck多种结构上创新,也有损失函数和一些细节点上的创新,订阅本专栏以后你不仅可以收获跟专栏的阅读权限,同时可以进Qq群,里面包含集成我所有创新的YOLO最新目录,和我本人录制的视频讲解教程,如果你想要在YOLOv8系列收获一篇论文,我相信订阅本专栏后你一定会有所收获~YOLOv8改进有效系列目录。

Snu77的博客 18万+

Java中的递归(recursion)方法----简单介绍加演示

递归方法简介: 一个方法体内调用它自身 方法递归包含了一中隐式循环,它会重复执行某段代码,但是这种执行无需循环控制。 递归一定要向已知方向递归,否则这种递归就变成了无穷递归,类似于死循环。 1.用递归求一个1-100的和 package demo; public class demo1 { public static void main(String[] args) { int n=100; demo1 demo1 = new demo1();

路宇的博客 4572

【2025年阿里云暑期实习(算法岗)-4月24日-第一题(100分)- 小红听歌】(题目+思路+Java&C++&Python解析+在线测试)

小红正在听歌,屏幕上同时展示着歌词和对应的播放进度条。s1t101ti​0iti​1i小红每次可以操作快进或回退一个歌词(即将播放指针向右或向左移动一个位置),数据初始时和操作过程均保证已经播放的歌词是s的一个前缀(可为空串)。她的目标是:以尽可能少的操作次数,使得字符串s中未播放状态的歌词是"幸运串"。请你计算,为了达到该目标,至少需要多少次操作?(数据保证可以在有限次内完成操作目标)【幸运串】每种字母出现的次数为指定的次数,可为空串,具体可查看输入描述。

m0_73659489的博客 114

java中的方法递归

JAVA中的方法递归 递归的思路 代码举例 一、递归的思路 一个方法在执行时,调用自身被称为“递归”。 递归相当于数学归纳法,有一个起始条件,有一个递推公式。 递归可以分为:单路递归和多路递归(如二叉树和斐波那契数列)。 二、代码举例 1、n的阶乘 //n的阶乘 public static int fac(int num){ if(num == 1){ return 1; } return num * fac(num-1)

qq_46075216的博客 1万+

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java递归之return

java递归之return介绍代码代码流程 介绍 我相信没人没听过递归吧,今天发现一个很有意思的是 ,关于java的递归的return 代码 public static int fact(int n){ //输入的数不能为负数 if (n<0){ return 0; } //为0确定值为1 if (n==0){ return 1; //自己调用自身的方

weixin_43850103的博客 4637

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

Java 递归算法

一、概述: Java递归:简单说就是函数自身直接或间接调用函数的本身。 二、应用场景: 若:一个功能在被重复使用,并每次使用时,参与运算的结果和上一次调用有关,这时就可以使用递归来解决这个问题。 使用要点: 1,递归一定明确条件。否则容易栈溢出。 2,注意一下递归的次数。 三、示例: 最简单的递归演示 public class recursi...

真香号 8773

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Java方法的递归

Java方法的递归是指一个Java方法直接或间接地调用自身,以完成重复或嵌套的计算任务。递归常用于处理具有自相似性的问题,通过分解问题为更小、更简单的子问题来解决整个问题。递归方法需要明确定义递归终止条件,以防止无限循环。斐波那契数列是一个数学上的数列,其形式为 1, 1, 2, 3, 5, 8, 13, 21, 34, …。数列中的每个数字都是前面两个数字之和。也就是说,第三个数字是前两个数字之和,第四个数字是前两个数字之和,以此类推。

qq_74013365的博客 1129

【Java 基础篇】Java递归详解

本文详细介绍了Java中的递归原理、应用场景和实现方法。递归是一种强大的编程技术,能够解决复杂问题,简化代码逻辑,并实现高效的算法。通过定义终止条件和递归调用,我们可以实现递归函数来解决各种问题。需要注意的是,递归的使用需要谨慎,要确保终止条件和递归调用的条件正确,并避免陷入无限循环。希望本文对你理解和应用Java中的递归有所帮助!附:示例代码// 终止条件 if(n == 0) {return 1;} // 递归调用 return n * factorial(n - 1);int n = 5。

繁依Fanyi的博客 1万+

Java的递归。

今天我们来谈谈Java递归。首先我们来看看下面的代码。从字面的意思来理解,递归就是不断的重复的调用自己.还是来看看下面的代码。 /** * @author hackbase 递归的学习和使用,递归头和递归体. */ public class TestLoopDeep { public static void main(String[] args) { a(); ...

hackerbaseing的博客 1168

Java递归详解

递归算法是一种直接或者间接调用自身函数或者方法的算法。Java递归算法是基于Java语言实现的递归算法。递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。 递归算法解决问题的特点: 1)递归就是方法里调用自身。2) 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口...

lili2922的博客 2355

Java递归

Java递归 递归,指在当前方法内调用自己的这种现象. 递归演示: public void method(){ System.out.println("递归的演示") //在当前方法内调用自己 method(); } 递归分为两种 直接递归 递归的代码演示,计算1-n之间的和,使用递归完成 public class DiGuiDemo { public static voi...

Qqidian的博客 264

java 递归 堆栈_Java中的堆栈安全递归

java 递归 堆栈 在本文中,摘自《 Java中的函数编程 》一书,我解释了如何使用递归,同时避免了StackOverflow异常的风险。 Corecursion正在使用第一步的输出作为下一步的输入来构成计算步骤。 递归是相同的操作,但是从最后一步开始。 在这种情况下,我们必须延迟评估,直到遇到基本条件(与corecursion的第一步相对应)为止。 假设我们的编程语言中只有两条指...

最佳 Java 编程 702

递归 java_递归就这么简单

递归介绍本来预算此章节是继续写快速排序的,然而编写快速排序往往是递归来写的,并且递归可能不是那么好理解,于是就有了这篇文章。在上面提到了递归这么一个词,递归在程序语言中简单的理解是:方法自己调用自己递归其实和循环是非常像的,循环都可以改写成递归,递归未必能改写成循环,这是一个充分不必要的条件。那么,有了循环,为什么还要用递归呢??在某些情况下(费波纳切数列,汉诺塔),使用递归会比循环简单很多很多话...

weixin_35784267的博客 996

java 递归终止_java关于递归

递归函数,即是调用一个函数的过程中出现直接或简介的调用该函数本身.此种函数就称为递归函数递归函数的优点是程序简洁易懂,可读性强;缺点是需要调用大量的函数调用,消耗大量的内存和时间一般来说,递归由函数出口和递归体两部分组成,递归出口给出了递归终止条件,递归体给出了递归的方式.下面一例就是简单的递归:求N的阶乘,即求1乘2乘3一直乘到N的乘积.递归形式如下:f(1)=1f(n)=f(n-1)*n前者就...

weixin_27427397的博客 2776

Java递归算法

递归算法是一种直接或者间接调用自身函数或者方法的算法。Java递归算法是基于Java语言实现的递归算法。    递归算法的实质是把问题分解成规模缩小的同类问题的子问题,然后递归调用方法来表示问题的解。递归算法对解决一大类问题很有效,它可以使算法简洁和易于理解。     递归算法解决问题的特点:    1)递归就是方法里调用自身。  2) 在使用递增归策略时,必须有一个明确的递归结束条件,称

数据人 1万+

Java递归,递归改循环

Java递归,递归改循环 为什么大家都说不建议用递归? 递归容易造成栈溢出,在jdk1.5前虚拟机给每个栈桢的运行空间128kb,在1.5以后为1m的运行空间.递归是指先进后出,也就是说第一进栈的对象会最后一个出站,然后栈桢的空间只有1m,生产环境的数据需要递归的深度,一般情况下我们无法通过测试来进行模拟。所以对于递归的深度不可把控的情况下,是有栈溢出的风险。 一个简单的例子测试递归的深度 递...

qq_31273003的博客 2522
上一篇: 关于java的可变参数
下一篇: 关于java数组的声明及创建
落满樱花的羊
博客等级 码龄5年 1021粉丝 54原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值