精华内容
下载资源
问答
  • Java的递归调用

    2020-10-03 13:29:44
    java的递归调用 递归:简单理解就是方法自己调用自己 递归机构包括两个部分: 递归头:什么时候不调用自身方法,如果没有头,将陷入死循环。 递归体:什么时候需要调用自身方法。 例子; publick static void main ...

    java的递归调用

    递归:简单理解就是方法自己调用自己

    递归机构包括两个部分

    递归头:什么时候不调用自身方法,如果没有头,将陷入死循环。
    递归体:什么时候需要调用自身方法。

    例子;

    publick  static void main (String[] args){
    Stystem.out.println(f(5));
    }
    publick  stastic int f(int n){
    if(n==1){
    return 1;
    }else {
    return n*f(n-1);
    }
    }
    }
    

    注意:如果调用自身太多会影响机器性能,不推荐使用

    展开全文
  • java的递归调用

    2009-11-16 10:37:51
    所谓递归调用,就是一个方法自己调用自己。在使用递归调用的时候,应该声明一个操作终结点。  但是采用递归调用的时候会增加内存负担,因为每调用一次方法都要新开辟一段栈空间,直到该方法调用结束才释放。...

        所谓递归调用,就是一个方法自己调用自己。在使用递归调用的时候,应该声明一个操作的终结点。

        但是采用递归调用的时候会增加内存负担,因为每调用一次方法都要新开辟一段栈空间,直到该方法调用结束才释放。

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

    Java中不合理的使用递归调用,可能会致使栈内存溢出,这点是须要注意的。java

    java将为每一个线程维护一个栈,栈里将为每一个方法保存一个栈帧,栈帧表明了一个方法的运行状态。 也就是咱们常说的方法栈。最后一个为当前运行的栈帧。数据库

    那么每一次方法调用会为新调用方法的生成一个栈帧,保存当前方法的栈帧状态,栈帧上下文切换,切换到最新的方法栈帧。数组

    在递归和循环之间选择时,应该优先选择的是循环而非递归,特别是要避免深度的递归。函数

    关于递归还须要了解的是尾递归调用,尾递归调用是能够被进行优化的。优化

    尾调用指的是一个方法或者函数的调用在另外一个方法或者函数的最后一条指令中进行。下面定义了一个foo()函数做为例子:spa

    int foo(inta) {

    a= a + 1;returnfunc(a);

    }

    尾调用,不仅是尾递归,函数调用自己均可以被优化掉,变得跟goto操做同样。这就意味着,在函数调用前先把栈给设置好,调用完成后再恢复栈的这个操做(分别是prolog和epilog)能够被优化掉。线程

    函数式语言的开发人员常常使用递归,因此大多数函数式语言的解释器都会进行尾调用的优化。可是在Java中使用深度的递归必定要很是的当心,不然颇有可能会致使栈溢出的发生。code

    下面是不合理使用递归的例子:对象

    packagetest;public classRecursiveTest {/*** 递归实现

    *

    *@paramn

    *@return

    */

    public static double recursive(longn) {if (n == 1) {return Math.log(1);

    }else{return Math.log(n) + recursive(n - 1);

    }

    }/*** 非递归实现

    *

    *@paramn

    *@return

    */

    public static double directly(longn) {double result = 0;for (int i = 1; i <= n; i++) {

    result+=Math.log(i);

    }returnresult;

    }public static voidmain(String[] args) {int i = 5000000;long test =System.nanoTime();long start1 =System.nanoTime();double r1 =recursive(i);long end1 =System.nanoTime();long start2 =System.nanoTime();double r2 =directly(i);long end2 =System.nanoTime();

    System.out.println("recursive result:" +r1);

    System.out.println("recursive time used:" + (end1 -start1));

    System.out.println("non-recursive result:" +r2);

    System.out.println("non-recursive time used:" + (end2 -start2));

    }

    }

    JVM中可能致使内存溢出的其余缘由还包括: blog

    引用变量过多使用了Static修饰 如public staitc Student s;在类中的属性中使用 static修饰的最好只用基本类型或字符串。如public static int i = 0; //public static String str;

    使用了大量的递归或无限递归(递归中用到了大量的建新的对象)

    使用了大量循环或死循环(循环中用到了大量的新建的对象)

    是否使用了向数据库查询全部记录的方法。即一次性所有查询的方法,若是数据量超过10万多条了,就可能会形成内存溢出。因此在查询时应采用“分页查询”。

    是否有数组,List,Map中存放的是对象的引用而不是对象,由于这些引用会让对应的对象不能被释放。会大量存储在内存中。

    是否使用了“非字面量字符串进行+”的操做。由于String类的内容是不可变的,每次运行"+"就会产生新的对象,若是过多会形成新String对象过多,从而致使JVM没有及时回收而出现内存溢出。

    如String s1 = "My name";

    String s2 = "is";

    String s3 = "xuwei";

    String str = s1 + s2 + s3 +.........;这是会容易形成内存溢出的

    展开全文
  • java的递归调用的问题关注:231答案:2mip版解决时间 2021-01-30 06:33提问者孤酒醉人心2021-01-29 07:10public class Recursion1 {static void hi(int n){if(n<=0) //x1return ; //x2hi(n-1);System.out....

    java 中的递归调用的问题

    关注:231  答案:2  mip版

    解决时间 2021-01-30 06:33

    e6cb1a03ad541b3098697807b7bf1798.png

    提问者孤酒醉人心

    2021-01-29 07:10

    public class Recursion1 {

    static void hi(int n){

    if(n<=0) //x1

    return ; //x2

    hi(n-1);

    System.out.println("你好"+n);

    }

    public static void main(String[] args) {

    hi(10);

    }

    }

    问题:1.X1行的的意思是n小于或者等于零吧,但是hi(10)返回到

    调用hi(int n),不就是n等于10吗,条件语句里面的if的意思是n小于等于0

    10怎么可能小于等于10了。这不就是条件为假了吗?程序应该不执行的啊!

    输出却有,我觉得要这么写条件if(n<=0)却没有输出

    2.X2行的返回值类型,一般不是在return后面直接加返回的对象吗

    X2行return直接承接下面的递归调用是这个意思是吧?

    最佳答案

    e6cb1a03ad541b3098697807b7bf1798.png

    二级知识专家落日海湾

    2021-01-29 08:23

    首先MAIN函数中调用 hi(10)方法时传到

    Recursion1 的hi()中的参数是n=10

    if(n<=0) //x1 条件不成立

    return ; //x2 这条语句不执行

    hi(n-1); 再次调用hi() 参数10-1=9

    进入hi()方法中的参数是n=9

    同样判断不成立 再次调用hi()方法

    。。。。。。。略(基本意思同上)

    当n=0时 if(n<=0) //x1 条件成立

    return ; //x2 这条语句执行 返回上级操作

    上一级操作是什么呢???

    当然是 n=1时啦 就是调用hi(1-1);方法时 输出:System.out.println("你好"+n);

    然后逐级返回 就会依次把语句打印出来啦

    全部回答

    e6cb1a03ad541b3098697807b7bf1798.png

    1楼阳忆青希

    2021-01-29 08:58

    public static int method(int n){

    if(n==1)

    return 1;

    else

    return n*method(n-1);

    }

    当n=5时,执行return n*method(n-1);即5*method(4)

    在这里调用method(4),这时候n=4

    当n=4时执行return n*method(n-1);即4*method(3)

    当n=3时执行return n*method(n-1);即3*method(2)

    当n=2时执行return n*method(n-1);即2*method(1)

    当n=1时执行return 1;返回到其上一次调用method的地方,即返回到2*method(1),即2*1

    然后2*1又返回到其上一次调用method的地方,即返回到3*method(2),即3*2*1

    就这样一层一层往上返回..

    最后就是5*4*3*2*1

    我要举报

    如以上问答内容为低俗/色情/暴力/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

    →点此我要举报以上信息!←

    推荐资讯

    大家都在看

    展开全文
  • 递归是程序语言中一个很基础应用,学习递归对理清程序编码思路非常有帮助所以在本章中把递归也作为学习一部分内容。希望读者了解并掌握它相关用法我们在中学时期都学过数学归纳法,例如求n阶乘比如要求5!,...
  • JSON与js对象序列化JavaScript对象表示法(JavaScript Object Notation,简称JSON)是一种轻量级数据交换格式,它基于js字面量表示法,是js一个子集.虽然是一个js子集但是他与语 ...SQL select结果集和return区别...
  • 我无法绕过递归,更具体地说是我教科书中提供语法.它看起来像这样:public int sum (int num){int result;if (num == 1)result =1;elseresult = num +sum(num -1);return result;}我特意把这条线弄糊涂了:result...
  • 主要介绍了Java方法递归调用实例解析,文中通过示例代码介绍非常详细,对大家学习或者工作具有一定参考学习价值,需要朋友可以参考下
  • 主要给大家介绍了关于java利用递归调用实现树形菜单样式相关资料,文中通过示例代码介绍非常详细,对大家学习或者工作具有一定参考学习价值,需要朋友们下面随着小编来一起学习学习吧
  • Java递归调用

    2019-10-29 16:00:39
    注意:递归调用要有一定条件限制,保证递归可以停下来。防止出现栈内存溢出。 构造方法禁止递归。 递归打印多级目录 定义一个方法,参数传递File类型目录,方法对目录进行遍历 (遍历包括文件夹及其子文件) ...
  • 这篇文章主要介绍了Java方法递归调用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下/*关于方法的递归调用1、什么是递归?-方法自身调用自身a(){a(){}}...
  • 说到递归,java的递归和C语言中也是很相似的,在Java中,递归其实就是利用了栈的先进后出的机制来描述的。public class HelloWorld {public static void main(String[] args){//Scanner s = new Scanner(System.in...
  • 如何更改算法以进一步显示递归调用的数量?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方法递归调用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下/*关于方法的递归调用 1、什么是递归? -方法自身调用自身 a(){ a...
  • java递归调用的实例

    2015-12-21 18:24:47
    package 递归调用;... * 递归调用就是在方法中调用自己方法  * @author Administrator  *  */ public class Jiecheng {  public static void main(String[] args) {  long r=Jiecheng.resursion
  • JAVA 遍历文件夹下所有文件(递归调用和非递归调用)1.不使用递归方法调用.public void traverseFolder1(String path) {int fileNum = 0, folderNum = 0;File file = new File(path);if (file.exists()) {...
  • 我们发现中都是一些条件只有满足这些条件了才会进行{}中的动作 那么java中的这些条件是怎么写的呢 这也是我们这节课学习的难点 下面要学习两种类型的运算符 1关系运算符 2逻辑运算符 Java的递归调用 汉诺塔 主讲人熊...
  • 上个星期修改了短信网关重启程序,结果这周又遇到了新问题。虽然有时可以重启成功,但是有时候还是重启失败。本地模拟测试怎么都没发现这个问题,趁着闲时...想了想,难道是由于方法递归调用的原因?于是自己弄...
  • java递归调用

    千次阅读 热门讨论 2014-09-16 17:40:49
    递归就是自己调用自己,方法与方法...所谓递归调用,就是一个方法自己调用自己。在使用递归调用的时候,应该声明一个操作的终结点。不然的话,你的递归程序会因栈空间不足而终止 。  其实很好理解,下面举个例子。
  • 一:需求现有以需求就是把某一个...递归本质:程序调用自身编程技巧叫做递归。程序调用自身编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接...
  • java——递归调用

    2015-10-18 16:04:00
    递归函数调用调用本身,并通过自己相应参数,这个计算过程中进行层,直到满足某些条件...假设不满足递归终止条件,则调用涉及递归调用的表达式。在调用函数自身时,有关终止条件參数要发生变化,并且需向递归...
  • Java中不合理使用递归调用,可能会导致栈内存溢出,这点是需要注意java将为每个线程维护一个栈,栈里将为每个方法保存一个栈帧,栈帧代表了一个方法运行状态。 也就是我们常说方法栈。最后一个为当前运行...
  • Java-递归调用

    2018-10-08 23:55:23
    A:递归概述: 方法定义中调用方法本身现象 B:递归注意事项 要有出口,否则就是死递归 次数不能太多,否则就内存溢出 C:案例1:求整数n阶乘 public class example { public static void main(String[] args)...
  • [JAVA]递归调用的顺序

    2019-09-04 09:04:20
    我们以一个简单例子开始讨论 ... //使用递归实现 求 1 ~ n 和 public static int getSum(int n) { if(n == 1) { //满足条件,结束递归 return 1; } int temp = getSum(n - 1); re...
  • Java方法的递归调用

    2020-01-26 22:33:25
    Java方法的递归调用 方法的递归调用就是方法自身调用自身。 先看下面的例子: public class Test { //使用 for 循环实现1~n的和 public static int loopSum(int n) { int sum = 0; for (int i = 1; i <= ...
  • 一:需求现有以需求就是把某一个...递归本质:程序调用自身编程技巧叫做递归。程序调用自身编程技巧称为递归( recursion)。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接...
  • 说到递归,java的递归和C语言中也是很相似的,在Java中,递归其实就是利用了栈的先进后出的机制来描述的。public class HelloWorld {public static void main(String[] args){//Scanner s = new Scanner(System.in...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,712
精华内容 1,884
关键字:

java的递归调用

java 订阅