方法(Method)
java的方法对应的就是c语言中的函数。
方法存在的意义:
1.方法是能偶模块化的组织代码(当代码规模比较复杂的时候)。
2.做到代码被重复使用,一份代码可以在多个位置使用。
3.让代码更好理解更简单。
4.直接调用现有开发方法,不必重复造轮子。
方法的定义:
public static 返回值(void/int…等) 方法名(形式参数列表){
方法体;
}
public static:因为当前所有的方法写完之后,会在main方法中调用,main方法是 static的。
返回值:可有可无,看需求,如果有返回值,那么返回值的类型需要和方法的返回值类型相匹配。
形式参数列表:形参=》实参的一份拷贝。
方法体:具体方法的实现。
定义一个方法,返回两个数中的最大值
eg:
public staitc int maxNum(int num1,int num2){
return num1>num2?num1:num2;
}
return代表函数结束,写在return后的代码将不会被执行。
方法的重载
方法的重载就是方法名相同,参数个数和类型不同。
eg:
public class MethondOverload {
public static int sum(int a, int b) {
return a + b;
}
public static double sum(double a, double b, double c) {
return a + b + c;
}
public static int sum(int a, int b, int c, int d) {
return a + b + c + d;
}
}
重载的规则:
1.方法名相同。
2.方法的参数不同(参数个数或参数类型)。
方法的返回值表类型不影响重载。
方法的递归
递归:一个方法在执行过程中调用自己本身。
1.要有一个趋近于终止的条件。
2.推导出递归的公式。
eg:求N的阶乘。
public static int fac(int n){
if (n==1){
return 1;
}
return (n*fac(n-1));
}
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
int n= scanner.nextInt();
System.out.println(fac(n));
}
}
函数递归的调用,是在栈上开辟内存的。给这个函数开辟栈帧。
1.用递归求斐波那契数列项数
public static int fabonaci(int n) {
if (n == 1 || n == 2) {
return n = 1;
}
return fabonaci(n - 1) + fabonaci(n - 2);
}
用递归写斐波那契数列是一个多路递归,类似于二叉树,会做很多重复的递归,浪费时间。
一般情况下斐波那契数列不建议用递归求。上图可以看出用递归方法,出现了2次F1,3次F2,2次F3,如果要求更高项数,会出现更多的重复项递归,会使运算的时间大大浪费。
2.用循环求斐波那契数列项数
public static int fabonaci2(int a) {
int f1 = 1;
int f2 = 1;
int f3 = 0;
//如果a是1或0的时候,这里进不了循环就会有问题。
for (int i = 3; i < a; i++) {
f3 = f1 + f2;
f1 = f2;
f2 = f3;
}
return f3;
}