方法递归
*什么是递归?
-
方法自身调用自身
a(){ a(); }
*递归很耗费栈内存,递归算法可以不用的时候尽量不使用
*递归必须有结束条件,没有结束条件会发生栈内存溢出错误。有时由于递归的太深,即使有结束条件也可能发生栈内存溢出错误
例:
//方法递归
//此程序出错:Exception in thread "main" java.lang.StackOverflowError
//栈内存溢出错误
public class RecursionTest01 {
public static void main(String [] args) {
System.out.println("main begin");
doSome();
System.out.println("main over");
}
//以下代码可以被重复调用,并且只要调用就会在栈内存中分配一块所属的内存空间
public static void doSome() {
System.out.println("doSome begin");
doSome();//这行代码不结束,下一行程序是不能执行的
System.out.println("doSome over");
}
}
*此程序运行的时候发生这样的错误:
Exception in thread "main" java.lang.StackOverflowError
栈内存溢出错误
错误发生无法挽回,只有一个结果,就是JVM停止工作
示例1:
- 计算1-100的和
public class RecursionTest02 {
public static void main(String [] args) {
int n = 100;
int retValue = sum(n);
System.out.println(retValue);
}
public static int sum(int n) {
if(n == 1) {
return 1;
}
return n + sum(n - 1);
}
}
示例二:
- 计算N的阶乘
import java.util.Scanner;
public class RecursionTest03 {
public static void main(String [] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int retValue = method(n);
System.out.println(retValue);
}
public static int method (int n) {
if(n == 1) {
return 1;
}
return n * method(n - 1);
}
}