一、方法:

  具有特定功能且能被重复调用的代码块()称为方法。

1.1 一般方法:

 

public class Test01{
    //(public:访问修饰符 static:表示静态属于类 执行堆栈在共享区 谁都可以访问 int:返回值类型  add(int a,int b):方法名(参数1,参数2,…))
    public static int add(int a,int b){
        int c = a + b;
        return c;
    }
    
    public static void main(String[] args){
        
        // 方法的调用
        int m = 10;
        int n = 20;
        int r = 0;
        r = add(m,n);
        System.out.println("r = " + r);
    }
}
View Code

 

解析:

  修饰符:决定了方法的工作范围还有(protected friendly private 如果不写默认是default);

  返回值类型:必选,如果没有返回值,须写void。方法只能返回一个值

  方法名:符合标识符命名规则

  参数列表:可以0个、1个、多个,需要同时说明类型。称为形式参数

  方法体:完成具体功能。如果有返回值,必须有return语句;如果没有返回值,默认最后一条语句是return,可以省略。

 

  add(m,n)表示方法的调用,在方法调用过程中,传入add方法中的mn方法调用的实际参数,称为实参

 

  方法add定义时的参数a,b称为形式参数,简称形参

 

  实参传递给形参的过程,称为方法调用过程的传值。

 

方法调用执行过程中,会产生一个内存空间,这个内存空间就是方法执行时需要的内存空间,称为方法执行堆栈。

1.2 方法的重载:

 

  java,一个类中可以定义多个同名但参数列表不同的方法方法构成了方法重载(overload);

方法重载的判断

  [1] 同一个类

  [2] 同一个方法名(方法名相同)

  [3] 参数列表不同

参数列表不同的理解满足以下其中一个条件即可。

  [1] 参数个数不同

  [2] 参数类型不同

  [3] 参数顺序不同

java中,方法存在一个签名(method sign),签名 方法名(参数类型1,参数类型2,)构成。

  show(String)

  add(int,int,int)

=>

  在同一个中,方法名相同,但方法签名不同的方法构成方法重载。

  方法重载和返回值无关方法修饰符无关。

二、递归:

  方法自身调动自身的过程称为递归;

2.1 特点:

  一个问题可被分解为若干层简单的子问题;

  子问题和其上层问题的解决方案一致;

  外层问题的解决依赖于子问题的解决;

public static long fact(int n){
        long sum = 1;
        for(int i=1;i<=n;i++){
            sum *= i;
        }
        return sum;
    }
使用循环解决n的阶乘问题

 

public class Test04{
    
    // 求n的阶乘
    public static int fact(int n){
        if(1 == n){
            return 1;
        }
        
        return n * fact(n-1);
    }
    
    public static void main(String[] args){
        int r = fact(1);
        System.out.println("r = " + r);
        
    }
}
recursion

2.2 递归优缺点:

递归的优点:

  简单的程序;

递归的缺点:

  但是递归调用会占用大量的系统堆栈,内存耗用多;

  在递归调用层次多时速度要比循环慢的多;

递归的使用场合:

  任何可用递归解决的问题也能使用迭代解决;

  当递归方法可以更加自然地反映问题,并且易于理解和调试,并且不强调效率问题时,可以采用递归;

  在要求高性能的情况下尽量避免使用递归,递归既花时间又耗内存;

 

 

 

 

 

三、一般方法与递归的内存图:

方法:

 

 递归: