递归方法
说明
一个方法体内调用它自身,这样的方法我们称之为方法递归。方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制。
例如有如下这道数学题。已知有一个数列:f(0) = 1, f(1) = 4, f(n+2) = 2*f(n+1)=f(n); 其中,n是大于0的整数,求f(10) 的值。下面程序将定义一个fn方法用于计算f(10) 的值。
public class Recursive{
public static int fn(int n){
if(n == 0){
return 1;
}
else if(n == 1){
return 4;
}
else{
//方法中调用它自身,就是方法递归
return 2*fn(n-1) + fn(n-2);
}
}
public static void main(String[] args){
//输出f(10) 的结果
System.out.println(fn(10));
}
}
在上面的fn方法体中,再次调用了fn方法,这就是方法递归。注意fn方法里调用fn的形式:
return 2*fn(n-1) + fn(n-2);
对于fn(10),即等于2*fn(9) + fn(8),其中fn(9)又等于2*fn(8) + fn(7),依次类推,最终会计算到fn(2) 等于2*fn(1) + fn(0),即fn(2)是可计算的,然后一路反算回去,就可以计算出fn(10)的值。
仔细看上面的递归过程,当一个方法不断地调用它本身时,必须在某个时刻方法的返回值是确定的,即不再调用它本身,否则这种递归就变成了无穷递归。因此定义递归方法时,有一条最重要的规定:递归一定要向已知方向递归。
方法重载
Java允许同一个类里定义多个同名方法,只要形参列表不同就行。如果同一个类中包含了两个或两个以上方法的方法名相同,但形参列表不同,则被称为方法重载。
下面程序中包含了方法重载的示例:
public class Overload{
public void test(){
System.out.println("无参数的方法");
}
public void test(String msg){
System.out.println("重载的test方法"+msg);
}
public static void main(String[] args){
Overload ol = new Overload();
ol.test();
ol.test("hello!");
}
}
输出结果:
无参数的方法
重载的test方法hello!