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-4的和,并分析内存分配情况

/*
使用递归计算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);
   }

}

/*
先不使用递归计算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);
   }

}

原文地址:https://www.cnblogs.com/fqh123/p/12251642.html

时间: 2024-07-31 15:49:35

java中方法的递归调用的相关文章

java中方法调用

JAVA中方法的调用[基础] 一.调用本类中的方法 方法一.被调用方法声明为static ,可以在其他方法中直接调用.示例代码如下: public class HelloWord { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String str="HelloWord!"; int a=0; int b=a+1; int result=

java中方法的定义

java中方法的定义: [修饰符]   [修饰符]   [返回值类型] 方法名字 [形参列表] //带[]的可以省略,返回值类型不能省略. 就拿main方法来说,public         static       void       main (String[] args){ 方法体: return 返回值://返回值要与返回值类型相匹配.没有返回值的话,返回值类型用void; } 方法的定义:为了完成某项功能,封装的一系列代码的集合: 方法的调用:同一个类中可以直接用方法名():调用:但

java中方法的重载与重写的区别

JAVA中方法的重载与重写 1)  方法的的参数上看:重载后的方法与源方法在参数的类型以参数列表的顺序上会发生改变,而重写后的方法在参数的数据类型与参数列表的顺序不会发生改变 2)原方法是否对被覆盖:重载后的方法不会覆盖原方法,而重写后的方法会覆盖父类中的方法,调用时也只会调用重写后的方法. 3)调用方法的对象上:重载后的方法被调用时,调用对象不同时,调用的方法不同,产生的结果也不同:而重写后的方法被调用时,无论调用的对象是父类或者子类的对象,调用的方法相同,产生的结果也一样

Java基础---Java中方法的重裁(四十一)

Java 中方法的重载 问: 什么是方法的重载呢? 答: 如果同一个类中包含了两个或两个以上方法名相同.方法参数的个数.顺序或类型不同的方法,则称为方法的重载,也可称该方法被重载了.如下所示 4 个方法名称都为 show ,但方法的参数有所不同,因此都属于方法的重载: 问: 如何区分调用的是哪个重载方法呢? 答: 当调用被重载的方法时, Java 会根据参数的个数和类型来判断应该调用哪个重载方法,参数完全匹配的方法将被执行.如: 运行结果: 判断方法重载的依据: 1. 必须是在同一个类中 2.

深入理解Java中方法的参数传递机制

形参和实参 我们知道,在Java中定义方法时,是可以定义参数的,比如: public static void main(String[] args){ } 这里的args就是一个字符串数组类型的参数. 在程序设计语言中,参数有形式参数和实际参数之分,先来看下它们的定义: 形式参数:是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数,简称"形参". 实际参数:在主调函数中调用一个函数时,函数名后面括号中的参数称为"实际参数",简称"

struts_2_Action类中方法的动态调用

(一)直接调用方法(不推荐使用) 1)Action类: private String savePath; public String getSavePath() { return savePath; } public void setSavePath(String savePath) { this.savePath = savePath; } public String other() { savePath = "other"; return "success";

黑马程序员-java中方法的知识点和递归调用

------<a href="http://www.itheima.com" target="blank">Java培训.Android培训.iOS培训..Net培训</a>.期待与您交流! ------- 方法执行原理:(方法不调用不执行,调用才执行)  *   方法在调用的这时候,才会在内存中划分空间  *   方法在调用的时候,是在栈内存中分配的空间(jvm有一块内存是栈内存) * 函数/方法目的: 还是为了代码重用  * 相同的类型的

java中方法重载和递归调用

什么时候会发生方法的重载? 1.发生在同一个类中. 2.方法名相同 3.参数列表不同(类型,个数,顺序) 4.和返回值类型无关 5.和方法的修饰符列表无关. 递归调用:方法自己调用自己. 例如: public class A {     public int sum (int n)          if (n == 1){              return 1;          }else{              return n+sum(n-1);          } } 递归

java中方法的知识点和递归调用

 方法执行原理:(方法不调用不执行,调用才执行) *   方法在调用的这时候,才会在内存中划分空间 *   方法在调用的时候,是在栈内存中分配的空间(jvm有一块内存是栈内存) * 函数/方法目的: 还是为了代码重用 * 相同的类型的操作,不容重复的写代码 * 函数/方法:就是一段有名字的代码段 * 方法的定义 *  [方法修饰符列表] 方法返回值类型 方法名(参数1,参数2,参数3....){ *          执行语句; *  } * *  方法修饰符列表是可选的:权限控制的:publi