精华内容
下载资源
问答
  • Java方法递归

    2020-04-28 11:36:35
    递归 非法使用 public class testRecursion{ public static void main(String[] args){ doSome(); } public static void doSome(){ System.out.println("doSome begin"); doSome(); System.out.prin...

    递归

    非法使用

    public class testRecursion{
      public static void main(String[] args){
        doSome();
      }
      public static void doSome(){
        System.out.println("doSome begin");
        doSome();
        System.out.println("doSome over");
      }
    }
    

    以上程序,doSome 虽然只有一份,但是可以被重复的调用,并且只要调用doSome方法就会在栈内存中新分配一块所属的内存空间,没有任何弹出,一直在不断的压栈。

    练习

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

    public class testRecursion{
      public static void main(String[] args){
        int a = sum(4);
        System.out.println(a);
      }
      public static int sum(int size){
        int result = 0;
        int i = 0;
        while(i <= size){
          result += i;
          i++;
        }
        return result;
      }
    }
    

    使用递归,计算1~N的和

    public class testRecursion{
      public static void main(String[] args){
        int a = sum(4);
        System.out.println(a);
      }
      public static int sum(int size){
        if (size == 1)
          return 1;
        return size + sum(size - 1);
      }
    }
    

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

    public class testRecursion{
      public static void main(String[] args){
        int a = sum(5);
        System.out.println(a);
      }
      public static int sum(int size){
        int i = 1;
        int result = size;
        while(i < size){
          result = result * (size - i);
          i++;
        }
        return result;
      }
    }
    

    使用递归,计算N的阶乘

    public class testRecursion{
      public static void main(String[] args){
        int a = sum(5);
        System.out.println(a);
      }
      public static int sum(int size){
        if(size == 1)
          return 1;
        return size * sum(size - 1);
      }
    }
    

    理论

    1. 什么是递归?
      • 方法自身调用自身 test(){test();}
      • 传递和回归
    2. 递归是很耗费栈内存的,递归算法可以不用的时候尽量别用。
    3. 无法结束的递归会发生这样一个错误**「这不是异常,这是一个 Error」**:
      java.lang.StackOverflowError
      栈内存溢出错误
      错误一旦发生就无法挽回,只会有一个结果:JVM停止工作。
    4. 递归必须要有结束条件,没有结束条件一定会发生栈内存溢出错误。
    5. 递归即使有了结束条件,即使结束条件是正确的,也可能会发生栈内存溢出错误,因为递归的太深了

    递归可以不使用尽量别用。

    但是有些情况下该功能的实现必须依靠递归方式。

    展开全文
  • 在java的学习中,各位java程序员不仅要有编程的思想,也要时时刻刻积累java语言的各种算法和方法。...Java方法递归是指在一个方法的内部调用自身的过程,以此类推就是java方法递归的理解思想,具体...

    在java的学习中,各位java程序员不仅要有编程的思想,也要时时刻刻积累java语言的各种算法和方法。其中,递归是java方法中的一种,想必看到这篇文章的朋友在前面已经学习掌握了java方法的相关知识点。下面这篇文章主要来学习一下java方法递归的知识。那么什么是java方法递归,递归又该如何实现呢?

    Java方法递归是指在一个方法的内部调用自身的过程,以此类推就是java方法递归的理解思想,具体来讲就是把规模大的问题转化为规模小的相似的子问题来解决。在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况。另外这个解决问题的函数必须有明显的结束条件,这样就不会产生无限递归的情况了。因此,java方法递归的两个条件就是,一通过递归调用来缩小问题规模,且新问题与原问题有着相同的形式;二存在一种简单情境,可以使递归在简单情境下退出。

    我们来研究一下在不使用递归的前提下,完成1到n的求和,这个应该很简单,请看下面代码:

    public class RecursionTest02 {

    public static void main(String[] args) {

    int n = 5;

    int result = accumulate(n);

    System.out.println("1到" + n + "的和是:" + result);

    }

    public static int accumulate(int n){

    int result = 0;

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

    result += i;

    }

    return result;

    }

    }

    运行结果如下图所示:

    2a2dc37b02e8074c9ba8ee6adc3189a8.png

    那么,使用递归应该怎么写呢?请看以下代码:

    public class RecursionTest03 {

    public static void main(String[] args) {

    int n = 5;

    int result = accumulate(n);

    System.out.println("1到" + n + "的和是:" + result);

    }

    public static int accumulate(int n){

    if(n == 1){

    return 1;

    }

    return n + accumulate(n - 1);

    }

    }

    运行结果如下图所示:

    89b01c6be685179d7ce2331a612bcf59.png

    要知道java方法递归有三个要素:一定有一种可以退出程序的情况;总是在尝试将一个问题化简到更小的规模;父问题与子问题不能有重叠的部分。这是实现java方法递归的条件。

    不使用java方法递归和使用方法递归的程序运行结果必然都是相同的,但是java方法递归会使代码更简单清晰,可读性更好。虽然可能java零基础的初学者不太能体会到这两个优点,但在后面的学习中,慢慢懂得在合适的程序中用合适的方法后,就会理解java方法递归的好处和作用了。

    展开全文
  • 主要介绍了Java方法递归调用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 1.方法递归1.1 简介定义:方法自身调用方法自身就是递归。例如:a(){a();}举例:看如下代码即实现的是递归调用:/*方法递归*/public classMethodDG {public static voidmain(String[] args) {System.out.println(...

    1.方法递归

    1.1 简介

    定义:方法自身调用方法自身就是递归。例如:

    a(){

    a();

    }

    举例:看如下代码即实现的是递归调用:

    /*方法递归*/

    public classMethodDG {public static voidmain(String[] args) {

    System.out.println("main begin");

    doSome();

    System.out.println("main over");

    }/*以下的代码片段虽然只有一份,但是可以被重复调用,并且只要调用doSome方法就会在栈内存中分配一块所属的内存空间

    **/

    public static voiddoSome() {

    System.out.println("begin");

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

    System.out.println("over");

    }

    }

    以上的程序运行的时候肯定会发生如下错误:java.lang.StackOverflowError(这是错误不是异常),栈内存溢出错误,错误发生无法挽回,只有一个结果,就是 JVM 会停止工作。结论:

    递归是很耗费栈内存的,递归算法可以不用的时候最好不用。

    因此递归一定要有结束条件,如果没有结束条件,会发生栈内存溢出错误,但是即使结束条件是正确的,也可能会发生栈内存溢出错误,因为递归的太深了。

    1.2 不使用递归,计算 1 ~ N 的和

    第一种实现方式:

    public classSumT1 {public static voidmain(String[] args) {int n = 5;int sum = 0;for (int i = 0; i <= n; i++) {

    sum= sum +i;

    }

    System.out.println(sum);

    }

    }

    第二种:单独定义一个方法,作为独立功能,可以完成 1~ N 的求和:

    public classSumT1 {public static voidmain(String[] args) {

    System.out.println(sum(5));

    }public static int sum(intn){int result = 0;for (int i=1;i<=n;i++){

    result+=i;

    }returnresult;

    }

    }

    1.3 使用递归计算 1~N 的求和

    public classSumT2 {public static voidmain(String[] args) {

    System.out.println(sum(4));

    }public static int sum(intn) {if (n==1){return 1;

    }return n+sum(n-1);

    }

    }

    我们分析下问什么按照以上代码即可以实现递归:

    目标:求取 1 、2、3、4 这四个数字的和;

    此时实现方式有如下两种方式:

    第一种方式:1+2+3+4 正向进行相加

    第二种方式:4+3+2+1 逆向进行相加

    很明显我们应该采取第二种方式进行加和。还要注意递归的时候需要有结束条件,不然会发生栈内存溢出错误。所以我们第一步确认递归结束条件:如果 n==1,此时结束递归,将此时的值进行返回。

    如果没有满足递归条件则此时按照如下计算逻辑进行计算:

    4+sum(4-1)等价于 4+sum(3)

    sum(3) = 3+sum(2)

    sum(2) = 2+sum(1)

    sum(1) = 1

    因此此时的递归逻辑应该是:4+3+2+1=10,即将我们需要的计算结果进行了返回。

    1.4 计算 N 的阶乘

    例如:5 的阶乘:5*4*3*2*1

    通过非递归的方式实现

    public classFactorial01 {public static voidmain(String[] args) {int n = 5;int retValue =method(n);

    System.out.println(retValue);

    }public static int method(intn) {int result = 1;//初始值为1for (int i = n; i > 0; i--) {//此时的 i 的值依次为:5 4 3 2 1

    result*=i;

    }returnresult;

    }

    }

    执行结果为:120

    通过递归的方式实现 N 的阶乘,本例中 N 取 5;

    public classFactorial02 {public static voidmain(String[] args) {int n = 5;int retValue =method(n);

    System.out.println(retValue);

    }public static int method(intn){int result = 1;if (n==1){return 1;

    }return n*method(n-1);

    }

    }

    此时计算结果为:120

    如果我们用一个图来描述上述递归过程类似如下的调用过程:

    1d1b1a591846b091be71adefcd965f53.png

    我们将上述图逆时针旋转 90 度会发现,这其实就是一个栈,main 方法最先调用,但是处于栈底的位置,因此最后出结果,递归结束条件处于栈顶,因而最先出计算结果。

    e8d17cee7cde390d4d770c892cb8d7d4.png

    展开全文
  • 这篇文章主要介绍了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

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

    展开全文
  • day04 java方法 递归

    2021-01-04 07:00:53
    java方法 递归 //5! = 5* 4* 3* 2* 1 public static void main(String[] args) { System.out.println(f(5));//120 } public static int f(int n) { if (n == 1) return 1; else { return n * f(n - 1); }
  • 接下来通过一个案例来学习如何使用递归算法计算自然数之和,如例Example1.java。public class Example1 {public static void main(String[] args) {int sum=getsum(4); //调用递归方法,获得1~4的和S...
  • 这篇文章主要介绍了Java方法递归调用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下/*关于方法的递归调用 1、什么是递归? -方法自身调用自身 a(){ a...
  • 递归是程序语言中的一个很基础的应用,学习递归对理清程序编码的思路非常有帮助所以在本章中把递归也作为学习的一部分内容。希望读者了解并掌握它的相关用法我们在中学时期都学过数学归纳法,例如求n的阶乘比如要求5!,...
  • 接下来通过一个案例来学习如何使用递归算法计算自然数之和,如例Example1.java。public class Example1 {public static void main(String[] args) {int sum=getsum(4); //调用递归方法,获得1~4的和S...
  • JAVA方法递归+数组

    2020-07-22 10:01:48
    方法递归 数组 静态初始化。动态初始化 数组作为方法的参数 数组作为方法的返回值 初始JVM内存区域划分
  • 方法递归 递归很熟悉了,我们再来谈谈递归。 定义: 一个方法在执行过程中调用自身, 就称为 “递归”. 递归,相当于数学上的 “数学归纳法”, 有一个起始条件, 然后有一个递推公式. 例如, 我们求 N! 起始条件: N = 1...
  • 方法递归是指在一个...接下来通过一个案例来学习如何使用递归算法计算自然数之和,如例Example1.java。publicclassExample1{publicstaticvoidmain(String[]args){intsum=getsum(4);//调用递归方法,获得1~4的和S...
  • java方法递归调用

    2014-08-08 20:43:52
    1、类是对某一类事物的描述,是抽象的... Exception in thread "main" java.lang.NullPointerException 空指针异常 */ per.name = "张三"; per.age = 30; per.tell(); } }
  • Java方法递归调用

    2014-08-08 21:55:45
    public class MethodDemo03 { public static void main(String[] args) { System.out.println(addNum(100)); } /** * num+(num-1)+(num-2)+...+1 * @param num * @return ... public static int add
  • 展开全部1、差别还是比较大的,或许,循环可以实现的递归也可以实现,32313133353236313431303231363533e58685e5aeb931333365663462但递归较容易实现的,循环就很难2、根据求斐波那契数列来说packagealgorithm.cxg....
  • ``` void CreateBiTree(BiTree T){ Scanner in = new Scanner(System.in); T = new BiTree();...但是当整个递归完了之后,T这个对象应该是只有一个根结点的树 不过运行的时候它却是null
  • 1、递归求 N 的阶乘 解析:N!=N*(N-1)!; 求N的阶乘,首先求(N-1)的阶乘,再求(N-2)的阶乘,...import java.util.Scanner; public class Test { public static void main(String[] args) { Scanner input=new Sc...
  • Java——方法 递归使用及练习

    千次阅读 多人点赞 2021-04-12 21:03:40
    文章目录Java方法递归1.递归的概念2.递归执行过程分析3.练习题练习一练习二练习三练习四练习五练习六完! Java方法递归 1.递归的概念 一个方法在执行过程中调用自身, 就称为 “递归”. 递归相当于数学上的 “数学...
  • 本文章来给各位同学介绍一个关于java 无限递归的构造器实例,如果你对此有兴趣不防进入参考哦同时希望此教程能对你加入无限递归的构造器的一些理解吧。 在一些情况下,程序可导致构造器进行无限递归,如:public ...
  • 请详细讲解这段程序是怎么执行的,我的理解是先执行main函数里的count(1),然后进入count方法,N值为1,所以执行IF语句,直到count(5),此时退出if 循环,打印N=5 ,然后应该没有要执行的东西了,可是答案是5 4 3 2 1 ...
  • 一、递归的思路一个方法在执行时,调用自身被称为“递归”。递归相当于数学归纳法,有一个起始条件,有一个递推公式。递归可以分为:单路递归和多路递归(如二叉树和斐波那契数列)。二、代码举例1、n的阶乘//n的阶乘...
  • 本文实例讲述了java实现递归文件列表的方法。分享给大家供大家参考。具体如下:FileListing.java如下:import java.util.*;import java.io.*;/*** Recursive file listing under a specified directory.** @author ...
  • 我们发现中都是一些条件只有满足这些条件了才...课前准备 云课堂APP 班级二维码 前情回顾 方法的嵌套调用 1方法嵌套调用的写法 2方法嵌套程序的流程执行 教学目标的确定 通过汉诺塔小游戏程序了解java递归的编程思想和
  • 我在使用Java这个基本递归问题时遇到了很多麻烦; 任何指针都很棒。"Write a static recursive method to print out the nth term of thegeometric sequence: 2, 6, 18, 54."据我所知,我应该在代码中的某个地方递归...
  • Java中实现递归方法有哪些发布时间:2020-11-10 16:44:28来源:亿速云阅读:58作者:LeahJava中实现递归方法有哪些?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面...
  • 我无法绕过递归,更具体地说是我的教科书中提供的语法.它看起来像这样:public int sum (int num){int result;if (num == 1)result =1;elseresult = num +sum(num -1);return result;}我特意把这条线弄糊涂了:result...
  • 最近在学C#的文件系统, 发现C#的文件系统貌似比java的东西少一点, 居然连删除目录都直接做好封装了, 想到学java的时候还要自己... 下面是代码非递归方法:package demo1;import java.io.File;import java.util.Arr...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 10,340
精华内容 4,136
关键字:

java方法递归

java 订阅