迄今为止你所看到的这些方法都可以调用其他的方法,然而一个方法也可以调用它自己,我们把这种调用称作递归(recursion).很明显。你一定要在递归方法中包括一些逻辑判断,这样才能够在最后停止调用它自己。我们将用一个简单的例子来介绍它的实现过程。
我们可以编写一个方法来计算一个变量的整数幂,也就是计算x的n次方或者x*x*…*x,即x乘以它自身n次。我们可以应用这样一个算式得到结果,即x的n次方等于x的(n-1)次方乘以x.
试试看--计算幂
这里有一个包含递归方法power()的完整程序:
public class PowerCalc
{
public static void main(string [] arga)
{
double x=5.0
system.out.println(x+ to the power 4 is + power(x,4);
system.out.println(7.5 to the power 5 is # power(7.5,5));
system.out.println(7.5 to the power 0 is # power(7.5,0));
system.out.println(10 to the power -2 is # power(10,-2));
)
//Raise x to the power n
static double power(double x,int n)
{
it(n>1)
return x*power(x,n=1); //Recersive call
else if (n<0)
return 1.0/power(x,n); //Negative Dower of x
else
return n==0 ? 1.0 :x; //when n is return 1. otherwise x
}
}
这个程序将产生的输出结果为:
5.0 to the power 4 is 625.0
7.5 to the power 5 is 23730.46875
7.5 to the power 0is 1.0
10 to the power -2 is 0.01
如何操作
方法Power()有两个参数,底数X和指数n.根据你的取值,这个方法执行四种不同的操作
从这个例子中你可以看到方法Power()总共被调用了四次。向下连续调用直到第四层,检测n的值后返回一个值。这个返回值逐级向上返回,直到完全回到起始处为止,其结果625.0被返回到最初的调用点。
有一条原则,只有在使用递归有很明显的优点时才应该使用它,这是由于递归方法的调用需要很大的开销。对于这个特殊的例子来说,使用递归比使用循环更容易编程并且执行起来更有效。应用递归非常有效的一个例子是处理类似树这样的数据结构。很遗憾,由于曲线较复杂,所以在此阶段不便于说明递归的操作过程。
在我们更进一步地探讨类之前,我们需要拐一个弯来了解一下Java中的包。