Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/389.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中添加递归,为什么最大值这么低?_Java_Loops_Recursion_Add - Fatal编程技术网

在Java中添加递归,为什么最大值这么低?

在Java中添加递归,为什么最大值这么低?,java,loops,recursion,add,Java,Loops,Recursion,Add,我发现向它们自身添加数字(使用递归)的最大值是21666。 要理解我的意思: 我们有数字5,我们必须将下面的所有数字(包括5)添加到它们自己。结果是15。 对于循环(带int),最大值是int max。 但使用递归方法,最大值似乎是21666。为什么会这样 公共类修改{ 公共静态void main(字符串[]args){ 整数=21666; System.out.println(“带循环的结果:”+add(number)); System.out.println(“递归结果:”+递归(数字));

我发现向它们自身添加数字(使用递归)的最大值是21666。 要理解我的意思: 我们有数字5,我们必须将下面的所有数字(包括5)添加到它们自己。结果是15。 对于循环(带int),最大值是int max。 但使用递归方法,最大值似乎是21666。为什么会这样

公共类修改{
公共静态void main(字符串[]args){
整数=21666;
System.out.println(“带循环的结果:”+add(number));
System.out.println(“递归结果:”+递归(数字));
}
公共静态整数添加(整数x){
整数和=0;

对于(int i=0;i每个递归调用将分配一个堆栈帧。因此,您的堆栈空间不足。

每个递归调用将分配一个堆栈帧。因此,您的堆栈空间不足。

这个数字不是一个神奇的数字,完全取决于您的环境和JVM可以使用的堆栈内存量。例如,它可以工作他给了我22000英镑


这个数字并不是一个神奇的数字,它完全取决于您的环境和JVM可以使用的堆栈内存量。例如,我使用22000


21667会发生什么?StackOverflower错误?太糟糕了,java不需要尾部递归。@假设是StackOverflower错误顺便说一下,
1+2+3+…+n
的和等于
n*(n+1)/2
。不确定这段代码是针对给定问题还是实际使用进行测试。@Obicere谢谢Obicere,我想到的第一件事是带循环的解决方案,效果很好。但是你的解决方案似乎更平滑:D谢谢!基本上这些都是家庭作业,讲师想要一个随机方法和递归方法来解决“问题”。21667会发生什么?StackOverflower错误?太糟糕了,java不需要尾部递归。@假设是StackOverflower错误顺便说一下,
1+2+3+…+n
的和等于
n*(n+1)/2
。不确定这段代码是针对给定问题还是实际使用进行测试。@Obicere谢谢Obicere,我想到的第一件事是带循环的解决方案,效果很好。但是你的解决方案似乎更平滑:D谢谢!基本上这些都是家庭作业,讲师想要一个随机方法和递归方法来解决“问题”。特别是,Java没有优化尾部递归。特别是,Java没有优化尾部递归。