【发布时间】:2015-06-12 05:40:07
【问题描述】:
我发现向自己添加数字(使用递归)的最大值是 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;
}
}
}
【问题讨论】:
-
21667 会发生什么?堆栈溢出错误?
-
太糟糕了,java不需要尾递归。
-
@assylias 是 StackOverflowError
-
顺便说一下,
1 + 2 + 3 + ... + n的和等于n * (n + 1) / 2。不确定此代码是否只是针对给定问题或实际使用进行测试。 -
@Obicere 感谢Obicere,我首先想到的是带有循环的解决方案,效果很好。但是您的解决方案似乎更顺畅:D 谢谢!基本上这些是家庭作业,讲师想要一种随机方法和一种递归方法来解决“问题”。