Java的递归。

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

今天我们来谈谈Java递归。首先我们来看看下面的代码。从字面的意思来理解,递归就是不断的重复的调用自己.还是来看看下面的代码。

/**
 * @author hackbase  递归的学习和使用,递归头和递归体.
 */
public class TestLoopDeep {
    public static void main(String[] args) {
        a();


    }



    public static void a(){
        System.out.println("a");
          b();

    }

    public static   void b(){
        System.out.println("b");
    }

}



上面的代码非常的简单,我们在主方法里面调用a()方法,在a方法里面调用B方法。输出的结果为a,b这点毫无疑问。我们将上面的代码稍微做下修改,既然a方法里面可以调用b方法,那么是否可以调用本身了。答案是可以的,我们修的代码如下.

public class TestLoopDeep {
    public static void main(String[] args) {
        a();


    }

    public static void a(){
        System.out.println("a");
          a();

    }

}

修改的代码如上,虽然是可以调用,但是编译器会报错。输出的结果为a但是编译器抛出一堆错误结束程序的运行.这究竟是为什么了,是因为在程序不断的调用自己的时候,程序不知道何时结束,直到资源的耗尽,在使用递归的时候,我们一定要确定递归的结束条件,以及递归体。一定要把这两个条件确定了。我们来看看下面的代码。

/**
 * @author hackbase  递归的学习和使用,递归头和递归体.
 */
public class TestLoopDeep {


    public static void main(String[] args) {
        a();

    }

     static int count=0;
    public static void a() {
        System.out.println("a");
        count++;
        if (count < 20) {
            a();
        } else {
            return;
        }

    }

}


在这段代码里面,我们唯一添加了一个判断语句,指示何时结束程序的运行当count>20的时候,我们必须要去调用a函数.那么这个程序就不会报错。

递归必须满足两个条件1.递归的结束条件。递归在什么条件下结束。2.递归体。就是什么要递归。下面我们来利用递归的代码来计算阶乘,来看看下面的代码。我们要计算n的阶乘。

代码如下;

import java.util.Scanner;

/**
 * @author hackbase  递归的学习和使用,递归头和递归体.
 */
public class TestLoopDeep {


    public static void main(String[] args) {
        System.out.println("请你输入你要计算阶乘的数字---->\n");
        Scanner sc = new Scanner(System.in);
        int count = sc.nextInt();
        int sum = Test(count);
        System.out.println("递归的结果为:" + sum);

    }

    public static int Test(int num) {
        if (num == 1) {
            return 1;
        } else {
            return num * Test(num - 1);
        }
    }


}




在上面的代码里面,我们使用递归来实现了求阶乘,但是该方法是i非常的消耗系统的资源的,在一般情况下,建议不要使用

凡是在能够使用递归的地方都可以使用循环来代替.

PowerBI参数化实战:3分钟搞定动态数据源切换(附常见错误排查) 本文详细介绍了PowerBI参数化实战技巧,教你3分钟实现动态数据源切换。通过创建参数、改造查询和测试切换三步,轻松应对多环境部署与团队协作中的路径问题,并附上常见错误排查指南,有效提升报表的可维护性和工作效率。 阅读详情

相关推荐

NVIDIA vGPU三种授权方式(个人玩家版)

NVIDIA vGPU三种方式搭建授权服务器(个人玩家版)

wstc2689784536的博客 8433

【Java 基础篇】Java递归详解

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

繁依Fanyi的博客 1万+

手把手教你用ADS优化肖特基二极管检波电路(附RC参数避坑指南)

本文详细介绍了如何使用ADS软件优化肖特基二极管检波电路,包括RC参数设置、常见失真问题分析与解决方案。通过实战案例和参数优化技巧,帮助射频工程师避免设计陷阱,提升电路性能。特别附有RC参数避坑指南,适用于调幅解调、功率检测等应用场景。

m2n3o4p5的博客 198

Java中的递归

Fibonacci数列:用递归写,效率低(随着n不断增加,计算次数增多),但是代码简短。1.递归的概念:一个方法在执行过程中调用自身,就称为递归(起始条件+递归公式)1.每次递归的时候,这个方法只执行了一部分,就去执行另一部分了。思路:一个数字的每一位怎么拿到(eg:123)2.归的时候,会把当前方法剩余部分执行完毕。2.按顺序打印每个数字的每一位,按递归写。4.从栈帧的角度来看:递是进栈,归是出栈。递归求1+2+3+4......+10。3.递的次数和归的次数是一样的。按顺序打印出其,并且计算其和。...

weixin_67793092的博客 5239

添加odbc数据源时的一些问题和解决办法

pl/sql

Mr_Syh的博客 9641

WVP+ZLM国标平台实战:从设备注册失败到视频播放黑屏,我遇到的5个典型问题与解法

部署WVP+ZLM国标视频平台时,设备注册失败、视频播放黑屏等问题常常让运维人员头疼不已。本文将基于真实运维场景,剖析五个最具代表性的故障案例,提供从网络配置到版本兼容性的全链路解决方案。

weixin_33178839的博客 360

Java——递归

回溯算法是一种系统化地搜索问题解空间的方法,主要用于解决组合优化问题。它通过递归地构建候选解,并在发现候选解不满足问题条件时回溯,从而尝试其他可能的选择。回溯算法的核心思想是不断尝试和撤销选择,直到找到所有可能的解决方案或者确认无解。

Stewie Lee的博客 8062

全志V3S嵌入式驱动开发(驱动开发准备)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 之前的文章都是教大家怎么搭建环境、看原理图、编译内核和根文件系统、做镜像,直到现在才进入驱动开发的主题。毕竟整个专栏的目的,还是希望大家能够学会驱动外部硬件。驱动好硬件,分成硬件和软件两个部分,硬件的部分比较好理解,就是看相关的信号有没有对接上即可,但是软件对接、甚至于怎么写软件,大家好像接触的比较少,所以这个时候,就可以简单讨论一下,怎么样才能写驱动代码。 1、了解外部驱动芯

嵌入式-老费,一个分享专业嵌入式知识的blog 2024

java递归

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

风止的博客 3810

华为OD机试真题 新系统2026-04-01 C语言 实现【计算数列位置N的值】

1、输入M、N两个数,则按照以下规则形成一个数列; 2、数列的前M个元素的值为1到M; 3、从M+1个元素开始,计算的逻辑为: 如果其前面的M个元素中,存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之如果其前面的M个元素中,不存在值相同的元素,则该位置上的数值等于前面M个数中最大的数值与最小的数值之差;

MISAYAONE的博客 588

OpenMM | PDBFixer 用于蛋白质预处理

PDBFixer 用于蛋白质预处理

DrugOne 3005

java的递归详细讲解

public class hello{ public static void main(String[] args){ int n=5; System.out.println("第"+n+"个月的兔子总数是"+funs(n)); } private static int funs(int n){ if(n==1||n==2) ...

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

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

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Java方法的递归

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

qq_74013365的博客 1128

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Java 递归算法

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

真香号 8773

Java递归

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

Qqidian的博客 264

java 递归终止_java关于递归

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

weixin_27427397的博客 2776

java 递归详解_Java递归函数讲解

Java中的递归什么是递归?函数直接或间接调用自身的过程称为递归,相应的函数称为递归函数。使用递归算法,某些问题可以很容易地解决。这类问题的例子有Hanoi的Towers(TOH)、序/前序/后序树遍历、图的DFS等。递归中的基本条件是什么?在递归程序中,给出了基本情况的解,大问题的解用小问题表示。int fact(int n){if (n < = 1) // base casereturn...

weixin_39969060的博客 1238

Java递归,递归改循环

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

qq_31273003的博客 2522

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

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

最佳 Java 编程 702

java怎么实现递归函数_Java方法递归是什么以及递归怎样实现

在java的学习中,各位java程序员不仅要有编程的思想,也要时时刻刻积累java语言的各种算法和方法。其中,递归是java方法中的一种,想必看到这篇文章的朋友在前面已经学习掌握了java方法的相关知识点。下面这篇文章主要来学习一下java方法递归的知识。那么什么是java方法递归,递归又该如何实现呢?Java方法递归是指在一个方法的内部调用自身的过程,以此类推就是java方法递归的理解思想,具体...

weixin_31608325的博客 1715

Java递归算法

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

数据人 1万+

java中递归

递归被称为编程风格,其中方法重复调用自身直到满足某个预定义条件。这种方法调用也称为递归方法。 1.递归方法的语法 基于递归的方法必须有两个基本组件才能正确解决问题。 递归方法调用 打破递归的前提条件 请记住,如果前提条件无法访问或未定义,则会发生堆栈溢出问题。 句法 method(T parameters...) {     if(precondition ==...

javaZhong的博客 496

递归 java_递归就这么简单

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

weixin_35784267的博客 996

java什么是递归_JAVA的递归是什么意思?

一、含义程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法,它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出解题过程所需要的多次重复计算,大大地减少了程序的代码量。递归的能力在于用有限的语句来定义对象的无限集合。二、递归算法解决问...

weixin_34554800的博客 1368

java递归内存_Java递归方法

Java递归方法什么是方法递归?我们先来看一段代码:public class RecursionTest01 {public static void main(String[] args) {m();}public static void m(){System.out.println("m begin");m();System.out.println("m over");}}以上代码的执行结果如下...

weixin_39738273的博客 346
上一篇: CSS的相对定位和绝对定位理解
下一篇: Java之中的this的深入的理解
hackerbaseing
博客等级 码龄8年 19粉丝 63原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值