关于方法的递归调用
1、方法自身调用自身
2、有结束条件
该程序执行过程种只有压栈动作,没有任何出栈动作,最终会导致内存溢出错误 StackOverflowError,如下
public class p {
public static void main(String [] args) {
m1();
}
public static void m1() {
m1();
}
举个例子:计算1到5的和
1、利用非递归
public class p {
public static void main(String [] args) {
int n = 5;
int result = method1(n);
}
private static int method1(int n) {
int sum = 0;
for(int i = 1; i <= n;i++) {
sum += i;
}
return sum;
}
}
2、利用递归
public class p {
public static void main(String [] args) {
int n = 5;
int result = method1(n);
}
private static int method1(int n) {
if(n == 1) {
return 1;
}else {
return n + method1(n - 1);
}
}
}
java虚拟机下的栈中递归的工作流程:(如下图)
JVM.png
函数的工作流程如下图:
method.png
网友评论