java方法的使用(重载,递归)

方法

java中的方法就是一个代码片段,类似于C语言里的函数

基本语法:

// 方法定义
public static 方法返回值 方法名称([参数类型 形参 ...]){
     
方法体代码;
 [return 返回值];
}
// 方法调用
返回值变量 = 方法名称(实参...);

注意事项:
1.方法定义时可以没有参数。每个参数要指定类型
2.方法定义必须在类中
3.java里没有“函数声明“的概念,方法的代码写在调用位置的上方或下方都可以

方法的重载

java里方法的重载和C++里函数的重载是类似的,目的都是为了避免给同一功能的方法(或函数)起很多名字

例如:

class Test {
      
 public static void main(String[] args) {
      
 	int a = 10; 
 	int b = 20; 
 	int ret = add(a, b); //两整数求和
 	System.out.println("ret = " + ret); 
 	double a2 = 10.5; 
 	double b2 = 20.5; 
 	double ret2 = add(a2, b2); //两小数求和
 	System.out.println("ret2 = " + ret2); 
 } 
 public static int add(int x, int y) {
      
 	return x + y; 
 } 
}

传递参数的类型不同,就不能调用现有add方法,所以要写成下面这样

class Test {
      
 	public static void main(String[] args) {
      
 	int a = 10; 
 	int b = 20; 
 	int ret = addInt(a, b); 
 	System.out.println("ret = " + ret); 
 	double a2 = 10.5; 
 	double b2 = 20.5; 
 	double ret2 = addDouble(a2, b2); 
 	System.out.println("ret2 = " + ret2); 
 } 
 public static int addInt(int x, int y) {
      //参数为整型时的方法addInt
 	return x + y; 
 } 
 public static double addDouble(double x, double y) {
     
  //参数为浮点型时的方法addDouble
 	return x + y; 
 } 
}

这样的代码是正确的,但两方法的功能是相同的,相同功能调用时写不同的方法名,在java里显得不友好,所以不如都叫add

class Test {
      
public static void main(String[] args) {
      
 	int a = 10; 
 	int b = 20; 
 	int ret = add(a, b); 
 	System.out.println("ret = " + ret); 
 	double a2 = 10.5; 
 	double b2 = 20.5; 
 	double ret2 = add(a2, b2); 
 	System.out.println("ret2 = " + ret2); 
 	double a3 = 10.5; 
 	double b3 = 20.5; 
 	double c3=  30.5;
 	double ret3 = addDouble(a3, b3,c3); 
 	System.out.println("ret3 = " + ret3); 
 } 
 public static int addI(int x, int y) {
      
 	return x + y; 
 } 
 public static double add(double x, double y) {
      
 	return x + y; 
 } 
 public static double add(double x, double y, double z) {
      
 	return x + y + z; 
 }
}

方法的名字都叫 add。有的 add 是计算 int 相加, 有的是 double 相加; 有的计算两个数字相加, 有的是计算三个数字相加,这就是方法的重载
总结一下重载的规则:
1、方法名相同
2、参数列表不同
3、返回值类型不做要求

方法的递归

一个方法在执行过程中调用自身, 就称为 “递归”
递归求N的阶乘

public static void main(String[] args) {
      
 	int n = 5; 
 	int ret = factor(n); 
	 System.out.println("ret = " + ret); 
} 
public static int factor(int n) {
      
 	if (n == 1) {
      
 	return 1; 
 } 
 	return n * factor(n - 1); // factor 调用函数自身
}

递归按顺序打印数字的每一位(例如:123 打印 1 2 3)

public static void main(String[] args){
     
	System.out.println(print(123));
}
public static print(int num){
     
	if (num > 9) {
      
 	print(num / 10); 
 	} 
 	System.out.println(num % 10);
}

递归求斐波那契数

public static void main(String[] args){
     
	System.out println(Feibona(5));
}
public static int feibona(int n){
     
	if(n==1||n==2)
	{
     
	return 1;
	}
	return feibona(n-1)+feibona(n-2);
}

递归求青蛙跳台阶(特殊的斐波那契数)

public static void main(String[] args){
     
	System.out.println(forg(5));
}
public static int forg(int n){
     
	if(n==1)
	{
     
	return 1;
	}
	if(n==2)
	{
     
	return 2;
	}
	return forg(n-1)+forg(n-2);
}

有些问题可以用递归解决,也可以用非递归(循环)解决

  • 相比于递归,非递归的程序更加高效

你可能感兴趣的:(java方法,递归,重载)