精华内容
下载资源
问答
  • 这篇文章主要介绍了Java方法递归调用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下/*关于方法递归调用1、什么是递归?-方法自身调用自身a(){a(){}}...

    这篇文章主要介绍了Java方法递归调用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    /*

    关于方法的递归调用

    1、什么是递归?

    -方法自身调用自身

    a(){

    a(){

    }

    }

    2、递归是很耗费栈内存的,递归算法可以不用的时候尽量不用

    3、一下程序运行的时候发生了这样一个错误【不是异常,是错误Error】:

    java.lang.StackOverflowErroe

    栈内存溢出错误。

    错误放生无法挽回,只有一个结果,就是JVM停止工作

    4、递归必须有结束条件,没有结束条件一定会发生栈内存溢出错误

    5、递归即使有了结束条件,即使结束条件是正确的,也可能会发生栈内存溢出错误,

    因为递归的太深了,栈内存被占满。

    注意:

    递归如果可以不使用,尽量不使用。

    但是有些情况下,该功能的实现必须一览递归实现,比如 目录拷贝

    */

    public class Method01{

    // 主方法

    public static void main(String[] args){

    doSome();

    }

    // 调用doSome方法

    // 以下的代码片段虽然只有一份

    // 但是可以被重复的调用,并且只要调用doSome方法就会在栈内存中开辟一块所属的内存空间,

    public static void doSome(){

    System.out.println("doSome begin!");

    doSome();//这行代码不结束,下一行代码是不能执行的

    System.out.println("doSome over!");

    }

    }

    /*

    不使用递归计算1-N的求和【可以不用递归,尽量不用递归】

    */

    public class Method01{

    // 主方法

    public static void main(String[] args){

    // 计算1-4的和

    // int n = 4;

    // int sum = 0;

    // for(int i=1;i<=n;i++){

    // sum += i;

    // }

    // System.out.println(sum);

    // 直接调用方法即可

    int n = 4;

    int resultVal=sum(n);

    System.out.println(resultVal);

    }

    // 单独定义一个方法,这是一个独立的功能,可以完成1-N的求和

    public static int sum(int n){

    int result = 0;

    for(int i=1;i<=n;i++){

    result+=i;

    }

    return result;

    }

    }

    /*

    使用递归计算1-N的和

    */

    public class Method01{

    // 主方法

    public static void main(String[] args){

    // 1-4的和

    int n = 4;

    int retValue = sum(n);

    System.out.println(retValue);

    }

    public static int sum(int n){

    // 4+3+2+1

    if(n == 1){

    return 1;

    }

    return n + sum(n-1);

    }

    }

    991e7d65f80762f7b09a69eae5687c35.png

    /*

    先不使用递归计算N的阶乘

    5的阶乘:

    5*4*3*2*1

    */

    public class Method01{

    // 主方法

    public static void main(String[] args){

    int n = 5;

    int retValue = method(n);

    System.out.println(retValue);//120

    }

    public static int method(int n){

    int result = 1;

    for(int i=n;i>0;i--){

    result *= i;

    }

    return result;

    }

    }

    /*

    使用递归计算N的阶乘

    5的阶乘:

    5*4*3*2*1

    */

    public class Method01{

    // 主方法

    public static void main(String[] args){

    int n = 5;

    int retValue = method(n);

    System.out.println(retValue);//120

    }

    public static int method(int n){

    if(n==1){

    return 1;

    }

    return n*=method(n-=1);

    }

    }

    递归内存分析:

    a355766be14f76c739c98aec8315be26.png

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

    展开全文
  • Java——递归调用

    2021-02-12 23:49:53
    递归是程序语言中的一个很基础的应用,学习递归对理清程序编码的思路非常有帮助所以在本章中把递归也作为学习的一部分内容。希望读者了解并掌握它的相关用法我们在中学时期都学过数学归纳法,例如求n的阶乘比如要求5!,...

    递归是程序语言中的一个很基础的应用,学习递归对理清程序编码的思路

    非常有帮助

    所以在本章中把递归也作为学习的一部分内容。希望读者了解并掌握它的相关用法

    我们在中学时期都学过数学归纳法,例如求n的阶乘

    比如要求5!,必须先求出4!,而要求4!,必须先求3!,要求3!,

    就必须先求2!,要求2!,必须求1!,要求1!,必须求0! 而0!=1,所以1!=0!*1=1,再进而求2!,3!分别表示

    读者可以从上面观察到,除计算1!子程序外,其他的子程序基本相似,可以设计这个子程序

    读者是否已明白?如果一个方法调用了其本身,那么这个方法就是递归,在这行

    程序语句res= factorial5时,就会执行 factorial(5),但执行 factorial5时,又会调用factorial(4)这时要注意,factorial(5)和factorial(4)虽然是同一个代码段,但在内存中,它的数据区是两份,而执行factorial(4)时又会调用factorial(3),执行factorial(3)又会调用factorial(2),每调用一次 factorial函数,就会在内存中新增一个数据区,那么这些复制了多份的函数大家可以把它看成是多个不同名的函数来理解

    但上面这个函数有点问题 在执行factorial(0),它又会调用 factorial(-1)……,造成死循环,也就是说,在factorial函数中,需要在适当的时候保证不再调用该函数,也就是不执行 res=factorial(i-1)*i这条调用语句

    把上例补充完整 结果如下所示

    裴波纳契数列一个比较定点的数学推理题,这个数列的第一位和第二位均为1,其他位数的值均为前面两位的和,如图4.14所示

    图4.14装波纳契数列分析

    我们试用递归算法求出第20位上的数值

    递归调用在明白原理的情况下,操作起来比较容易。用递归来解决装波纳契数列问题的代码如下所示

    输出结果

    对于把十进制数转换成二进制数的过程,读者可以试着用递归的方式来实现,这将有助于理解递归的用法

    展开全文
  • java递归调用方法

    2021-03-10 06:29:38
    我无法绕过递归,更具体地说是我的教科书中提供的语法.它看起来像这样:public int sum (int num){int result;if (num == 1)result =1;elseresult = num +sum(num -1);return result;}我特意把这条线弄糊涂了:result...

    我无法绕过递归,更具体地说是我的教科书中提供的语法.它看起来像这样:

    public int sum (int num)

    {

    int result;

    if (num == 1)

    result =1;

    else

    result = num +sum(num -1);

    return result;

    }

    我特意把这条线弄糊涂了:

    result = num + sum(num - 1);

    不断绊倒的部分是每次在任何其他程序中,我们从两种方式之一调用方法.方法是静态方法,并通过类名称后跟句点调用,后跟方法名称. (例如:Math.random();)

    或者,该方法已通过对象引用变量调用,该变量属于同一类. (我们首先必须独立创建)

    这个语法似乎没有遵循前面两个例子中的任何一个,我想知道为什么会这样?是因为我们从方法本身调用方法,从语法上讲它是如何完成的,还是我错过了什么?

    解决方法:

    当一个方法只是通过它的名字调用而不是静态的时,暗示你正在调用这个方法.所以,您的代码等同于以下内容:

    public int sum (int num) {

    int result;

    if (num == 1)

    result =1;

    else

    result = num + this.sum(num -1);

    return result;

    }

    对于为类定义的任何实例方法都是如此,而不仅仅是递归方法(在任何特定方式中语法都不特殊).

    标签:java,methods,recursion

    来源: https://codeday.me/bug/20190527/1163444.html

    展开全文
  • java——递归调用

    2021-03-10 06:28:47
    JSON与js对象序列化JavaScript对象表示法(JavaScript Object Notation,简称JSON)是一种轻量级的数据交换格式,它基于js字面量表示法,是js的一个子集.虽然是一个js的子集但是他与语 ...SQL select结果集和return的区别...

    JSON与js对象序列化

    JavaScript对象表示法(JavaScript Object Notation,简称JSON)是一种轻量级的数据交换格式,它基于js字面量表示法,是js的一个子集.虽然是一个js的子集但是他与语 ...

    SQL select结果集和return的区别

    IF EXISTS (SELECT 1 FRIN sys.objects where object_id=OBJECT_ID(N'[dbo].[testReturn_up]')AND type in ...

    兼容所有浏览器的JS动态显示当前日期时间

    苹果IOS系统SVN命令 同样适用于linux系统

    1.将文件checkout到本地目录svn checkout path(path是服务器上的目录)例如:svn checkout svn://192.168.1.1/pro/domain简写:svn ...

    OC中如何把数组中字典的数据转换成URL&quest;

    在使用objective-c语言开发iOS应用中,会向服务器通过URL请求一些数据,因此对URL的拼接肯定少不了.而在iOS中,我们一般是通过将字典中的数据拼接成我们要请求的URL字符串,那这个是怎么 ...

    What qualities characterize a great PhD student

    省理工计算机教授David Karger接触了许多世界上最杰出的博士生,近日总结出了优秀博士通常具备的五点品质:0 过人的智力 1 好奇心 2 创造力 3 纪律性与生产力 4 与观众沟通 5 与伙伴沟 ...

    opencart修改后台文件夹名

    在使用opencart进行二次开发时,若需要修改后台目录的文件夹名是可以操作的.具体步骤如下: 1.将网站后台文件夹名字改成opencartadmin 2.在该文件夹下找到config.php文件如图 ...

    Java线程池带图详解

    线程池作为Java中一个重要的知识点,看了很多文章,在此以Java自带的线程池为例,记录分析一下.本文参考了Java并发编程:线程池的使用.Java线程池---addWorker方法解析.线程池.Th ...

    9&period;11 test

    题面.pdf T1:通过打表发现,从一个点出发只有距离为1,2,3,5,6,9,10,13,17的点才不能到达: 那么我们转移的时候只有距离在20以内才不一定能直接转移,那么我们离散化之后; 对于每一 ...

    git中status指令总是提示内容被修改的解决

    大熊猫猪·侯佩原创或翻译作品.欢迎转载,转载请注明出处. 如果觉得写的不好请多提意见,如果觉得不错请多多支持点赞.谢谢! hopy ;) 最近在用git提交项目修改时发现一个问题,就是多次 git a ...

    展开全文
  • 递归调用是一种特殊的调用形式,即方法自己调用自己。 递归的三个条件: 边界条件 递归前进段 递归返回段 当边界条件不满足时,递归前进;当边界条件满足时,递归返回。 public class TestDemo { public static ...
  • 假设有一个功能的执行需要进行递归调用,但是在递归执行过程中,可能会引发异常,如果引发的异常,就得记录以及递归调用了多少次,以及递归出现错误的具体异常信息和引发异常的行。测试代码如下:public class ...
  • java中如何实现递归调用

    千次阅读 2021-03-05 15:31:56
    import java.util.*;public class Chessboard { public Chessboard(int tr,int tc,int dr,int dc,int size) { if(size==1) return;import java.util.*;public class Chessboard { public Chessboard(in...
  • 这个问题的重点是说明Java不能如预期的那样工作。您将如何期待以下代码的行为?public class SynchTester {private static SynchTester synchTester;public synchronized static SynchTester getSynchTester(){if...
  • 一:需求现有以需求就是把某一个...递归本质:程序调用自身的编程技巧叫做递归。程序调用自身的编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接...
  • 我刚刚学习方法,所以我还有很长的路要走.我制作了一个类似游戏的“Oregon Trail”,它使用“游戏结束”方法来询问用户是否想要再次玩游戏.主要问题:我的老师提到了一些含糊不清的问题,如果游戏循环次数足够多,我们...
  • 如何更改算法以进一步显示递归调用的数量?public class fibb {static long fibonacci(long n){if (n == 0)return 0;else if (n == 1)return 1;elsereturn fibonacci(n - 1) + fibonacci(n - 2);}public static void...
  • Java中的递归调用

    2021-03-10 04:55:19
    Java中不合理的使用递归调用,可能会致使栈内存溢出,这点是须要注意的。javajava将为每一个线程维护一个栈,栈里将为每一个方法保存一个栈帧,栈帧表明了一个方法的运行状态。 也就是咱们常说的方法栈。最后一个为...
  • Java方法递归调用

    2021-01-24 21:09:45
    递归就是:A方法调用A方法!就是自己调用自己 利用递归可以用简单地程序来解决一些复杂的问题。他通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的问题来求解,递归策略只需少量的程序就可描述出...
  • 为什么运行如下程序 , 方法sum2 不会导致栈溢出, 方法sum 会导致栈溢出?--------output-----------32004000java.lang.StackOverflowErrorException in thread "main"--------output-----------public class ...
  • Java中函数的递归调用

    2021-03-06 18:01:48
    说到递归java中的递归和C语言中也是很相似的,在Java中,递归其实就是利用了栈的先进后出的机制来描述的。public class HelloWorld {public static void main(String[] args){//Scanner s = new Scanner(System.in...
  • java的学习中,各位java程序员不仅要有编程的思想,也要时时刻刻积累java语言的各种算法和方法。...Java方法递归是指在一个方法的内部调用自身的过程,以此类推就是java方法递归的理解思想,具体...
  • 一、方法调用以及方法参数传递1、方法的定义:​访问修饰符返回值类型方法名([参数列表]){​方法体}如果方法体中需要一些未知的数据作为执行条件,那么这些数据可以作为参数。如果方法需要返回数据,在定义有...
  • 使用20MB的Java堆栈(-Xss20m),每次调用的摊销成本波动大约为16-17字节。我看到的最低的是16.15字节/帧。因此我得出结论,成本是16字节,其余是其他(固定)开销。 采用单个int的函数基本上具有相同的成本,16字节/帧...
  • Java递归调用

    2021-03-05 15:32:45
    import java.io.File;/*** 递归调用*/public class RecursiveTest {public static void main(String[] args) {int size = 10;int start = 1;int result = 0;for(int i=start;i < size;i++)...
  • Java方法递归调用

    2021-11-19 20:43:17
    递归就是方法自己调用自己,每次调用时传入不同的变量。 可以解决数学问题,像8皇后问题、汉诺塔问题、阶乘问题、迷宫问题。 可以解决算法问题,例如快排、归并排序、二分查找、分治算法等。 ...
  •  //输入姓名,在map集合查找是否存在,存在则验证密码,不存在则使用递归,返回重新输入 Set sets = m.keySet(); for (String s : sets) { if (name.equals(s)) { martchPassWord(s, m); return; } } ...
  • Java中的递归调用机制

    2021-08-03 20:31:55
    本文通过一个简单的递归程序,来记录一下java虚拟机中的递归调用机制。 首先递归算法我们可以总结为:是方法自己调用自己,每次调用时传入不同的变量。递归有助于编程者解决复杂的问题,同时可以让代码变得简洁。 ...
  • 创建阶段(Created) 在创建阶段系统通过下面的几个步骤来完成对象的创建过程: 为对象分配存储空间 开始构造对象 从超类到子类对static成员进行初始化 超类成员变量按顺序初始化,递归调用超类的构造方法 子类成员...
  • Java递归算法

    2021-03-10 01:16:25
    请详细讲解这段程序是怎么执行的,我的理解是先执行main函数里的count(1),然后进入count方法,N值为1,所以执行IF语句,直到count(5),此时退出if 循环,打印N=5 ,然后应该没有要执行的东西了,可是答案是5 4 3 2 1 ...
  • 本篇文章主要介绍了JAVA 遍历文件夹下的所有文件(递归调用和非递归调用) ,具有一定的参考价值,有兴趣的可以了解一下。JAVA 遍历文件夹下的所有文件(递归调用和非递归调用)1.不使用递归的方法调用.public void ...
  • // 所谓递归,是指程序调用自身,当然,递归不会无休止地调用下去,它必然有一个出口,当满足条件时程序也就结束了,不然的话,那就是死循环了。// 提供几个递归实例,有的是从网上找的// 1、十进制转换二进制// 2、...
  • 基本介绍 简单的说: 递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂问题,同时可以让代码变得简洁 递归能解决什么问题?
  • 斐波那契数列中特定位置的数字可以使用递归方法获得。演示此过程的程序如下:示例publicclassDemo{publicstaticlongfib(longn){if((n==0)||(n==1))returnn;elsereturnfib(n-1)+fib(n-2);}publicstatic...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 179,255
精华内容 71,702
关键字:

java方法的递归调用过程

java 订阅