Java中的方法类似于C语言中的函数,其作用就是将一些固定作用的代码片段存为一个整体,当需要使用时直接调用,就可以使代码整体变得条例清晰.
方法的递归
当一个问题满足以下三个要求时,就可以使用递归来解决这个问题:
1.一个比较大的问题可以拆分为多个子问题.
2.拆分后的子问题与原问题除了数据规模不同,其他解决思路完全相同.
3.存在终止递归的条件.
eg:
使用递归求一个数num的阶乘.
按照上面的思路一步一步来进行操作.
首先,num这个数的阶乘可以转换为num * (num-1)!,所以满足第一点,可以拆分.
第二点,拆分后的子问题就为求解(num-1)!,而(num-1)的阶乘为(num-1)*((num-1)-1)!.也满足第二点.
第三点,存在终止条件.num的阶乘求解过程就为从1一直乘到num,所以当num-1 == 1的时候,递归终止.
条件满足,具体实现:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num = scan.nextInt();
int ret = func(num);
System.out.println(ret);
}
public static int func(int num) {
//当num == 1的时候,递归终止
if(num == 1){
return 1;
}
return num * func(num - 1);
}
}
方法的重载
在同一个类中,定义了若干个方法名称相同,参数列表不同(参数类型或者参数个数),与返回值无关,这样的一组方法称为方法的重载.
eg:
有一个SumInt方法,求两个整数中的和,这是很容易实现的.但是如果要求两个浮点数的最大值,我们就得再写一个SumDouble方法,来求出三个浮点数的和.使用的时候就得调用两次.
实际上,在Java中,方法的重载就很好解决了这一问题,可以定义两个方法,但是方法的名称可以都为Sum,可以让程序更清晰易读。
实际上,Java中的System.out.println()方法就是方法重载的结果.
import java.util.Scanner;
import static netscape.security.Privilege.add;
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int num1 = scan.nextInt();
int num2 = scan.nextInt();
double num3 = scan.nextDouble();
double num4 = scan.nextDouble();
double num5 = scan.nextDouble();
int ret = Sum(num1,num2);
double ret1 = Sum(num3,num4,num5);
System.out.println(ret);
System.out.println(ret1);
}
public static int Sum(int num1, int num2) {
return num1 + num2;
}
public static double Sum(double num3, double num4, double num5) {
return num3 + num4 + num5;
}
}