在 Java 中添加递归,为什么最大值这么低?
Add-Recursion in Java, why ist the maximum so low?
我发现给自己加上数字(递归)的最大值是21666。
要理解我的意思:
我们有数字 5,我们必须将下面的所有数字相加,包括 5。结果将是 15。
对于循环(使用 int),最大值是 int 最大值。
但是使用递归方法似乎最大值是21666。为什么会这样?
public class Rekursion {
public static void main(String[] args) {
int number = 21666;
System.out.println("Result with a loop: " + add(number));
System.out.println("Result with recursion: " + recursion(number));
}
public static int add(int x) {
int sum = 0;
for (int i = 0; i <= x; i++) {
sum += i;
}
return sum;
}
public static int recursion(int x) {
if (x==1){
return 1;
}
else{
return recursion(x-1)+x;
}
}
}
每次递归调用都会分配一个栈帧。因此,您 运行 出栈 space。
这个数字不是一个神奇的数字,它完全取决于您的环境和您的 JVM 可以使用的堆栈内存量。例如,它对我来说适用于 22000。
我发现给自己加上数字(递归)的最大值是21666。 要理解我的意思: 我们有数字 5,我们必须将下面的所有数字相加,包括 5。结果将是 15。 对于循环(使用 int),最大值是 int 最大值。 但是使用递归方法似乎最大值是21666。为什么会这样?
public class Rekursion {
public static void main(String[] args) {
int number = 21666;
System.out.println("Result with a loop: " + add(number));
System.out.println("Result with recursion: " + recursion(number));
}
public static int add(int x) {
int sum = 0;
for (int i = 0; i <= x; i++) {
sum += i;
}
return sum;
}
public static int recursion(int x) {
if (x==1){
return 1;
}
else{
return recursion(x-1)+x;
}
}
}
每次递归调用都会分配一个栈帧。因此,您 运行 出栈 space。
这个数字不是一个神奇的数字,它完全取决于您的环境和您的 JVM 可以使用的堆栈内存量。例如,它对我来说适用于 22000。