5.8 递归方法
介绍了条件语句后,现在可以探索程序能做的最神奇的事情之一了——递归(recursion)。思考下面的示例:
public static void countdown(int n) {if (n == 0) {System.out.println("Blastoff!");} else {System.out.println(n);countdown(n - 1);}}
这个方法名为 countdown,它将一个整数作为参数。如果这个参数为零,它就显示单词 Blastoff,否则就显示这个数字,再用实参 n-1 调用自己。调用自己的方法称为递归方法(recursive method)。
如果在 main 中调用 countdown(3),结果将如何?
这次执行 countdown 时,n==3;由于 n 不为零,因此它显示值3,再调用自己……这次执行 countdown 时,n==2;由于 n 不为零,因此它显示值2,再调用自己……这次执行 countdown 时,n==1;由于 n 不为零,因此它显示值1,再调用自己……这次执行 countdown 时,n==0;由于n 为零,因此它显示值“Blastoff!”再返回。使用 1 调用的 countdown 返回。使用 2 调用的 countdown 返回。使用 3 调用的 countdown 返回。
至此返回了 main,于是输出类似于下面这样:
321Blastoff!
再来看一个示例。在这个示例中,我们将重新编写 4.3 节中的方法 newLine 和 threeLine:
public static void newLine() {System.out.println();}public static void threeLine() {newLine();newLine();newLine();}
虽然这些方法管用,但如果要显示 2 个或 100 个空行,它们并不能提供帮助。下面是一种更佳的解决方案:
public static void nLines(int n) {if (n > 0) {System.out.println();nLines(n - 1);}}
这个方法将一个整数(n)作为形参,并显示了 n 个空行。其结构与 countdown 类似:只要 n 大于零,就显示一个空行,然后调用自己再显示 n-1 个空行。显示的总空行数为 1+(n - 1),即我们希望的 n 个。
