05 方法_递归

2019-04-29 08:50:16来源:博客园 阅读 ()

新老客户大回馈,云服务器低至5折

 

1.1 方法

1.1.1 方法概念

封装了特定功能的代码块且可以被重复使用就是方法(Method)形如:

[访问修饰符] 返回值类型 方法名字(参数列表){

特定功能的代码块

return 返回值

}

 

 

public int add(int a,int b){

int c = a + b;

return c;

}

 



 

 

理解:

ü 修饰符:封装性时再讲,决定了方法的工作范围

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

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

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

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

 

1.1.2 方法的调用

方法和方法之间可以相互调用(call/invoke)

 

public static void main(String[] args){

 

// 方法的调用

int m = 10;

int n = 20;

int r = 0;

r = add(m,n);

System.out.println(r);

}

 

 

 


形式
参数(形参):方法在定义时的参数称为形式参数。 

实际参数(实参):方法在调用的过程中传入的参数,称为实参。

 

实参和形参的工作原理A

方法调用时

实参 -> 形参:复制传递

 

1.2 方法重载(overload)

一个类中可以定义多个相同名称参数列表不同的方法我们把这个现场称为方法重载。

 

方法重载判断的条件:

[1]同一

[2]方法名称相同

[3]参数列表不同(类型不同、个数不同顺序不同)

 

 

引入概念-方法签名(Method sign)

编程语言中,方法的名字形参列表的类型构成了方法签名。

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

 

public class Test02{
// add(int,int)
public static int add(int a,int b){
int c = a + b;
return c;
}
// add(int,int,int)

public static int add(int a,int b,int c){
int d = a + b+ c;
return d;
}
// add(float,float)
public static float add(float a,float b){
float r = a + b;
return r;
}
// add(int,float)

public static float add(int a,float b){
float r = a + b;
return r;
}
//add(float,int)

public static float add(float a,int b){
float r = a + b;
return r;
}
// add(int,float)
/*
public static float add(int b,float a){

float r = a + b;

return r;

}
*/
// add(float,int)
/*
public static float add(float b,int a){
float r = a + b;
return r;
}
*/
public static void main(String[] args){
add(1,2,4);
add(1.0f,1)
}
}

 


调用时,会根据不同的参数列表选择对应的方法。 

 

 

总结:

– 在同一个类中

– 方法的名称相同

– 参数的类型,个数,顺序不同

– 与方法的修饰符和返回值类型无关

 

 

1.3 递归

方法自身调用自身的过程叫做方法的递归(recursion)

 

递归问题的特点

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

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

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

 

需求:5阶乘(5!)

分析:

5! = 5*4!

4! = 4*3!

3! = 3*2!

2! = 2*1!

1! = 1;

 

public class Test03{

 

public static int rec(int n){

if(1 == n){

return 1;

}

 

return n * rec(n-1);

}

 

public static void main(String[] args){

int a = 5;

int r = rec(a);

System.out.println("r = " + r);

}

}

 


递归执行过程 

递归效率稍低。

 

递归结构包括两个部分:

  • 递归结束条件。解答:什么时候不调用自身方法。如果没有条件,将陷入死循环。
  • 递归体。解答:什么时候需要调用自身方法。

 

总结

  • 递归的优点

– 简单的程序

  • 递归的缺点

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

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

  • 递归的使用场合

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

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

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

 


原文链接:https://www.cnblogs.com/aknife/p/10784781.html
如有疑问请与原作者联系

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:Java 8 Lambda 表达式

下一篇:新人报道