为什么此代码在 java 中向我发送 Stackoverflow
why this code send me Stackoverflow in java
我尝试将 long
和 double
与 c, k, n
变量一起使用,但 netbeans 显示堆栈溢出错误:
public class Main {
public static void main(String[] args) {
double c=0; //combinatorial
double n=5;
double k=15;
c= factorial(n)/(factorial(k)*factorial(n-k));
System.out.print(n+" combinatorial "+k+" between "+c+"\n");
}
static double factorial (double number) {
if (number == 0)
return 1;
else
return number * factorial(number-1);
}
}
Exception in thread "main" java.lang.WhosebugError
at co.combinatorial.Main.factorial(Main.java:26)
at co.combinatorial.Main.factorial(Main.java:29)
at co.combinatorial.Main.factorial(Main.java:29)
at co.combinatorial.Main.factorial(Main.java:29)
......
Java 结果:1
我必须使用整数文字还是 long.parselong
我做错了什么?
根据初始值,n-k = -10。由于这小于 0,因此您的阶乘方法永远不会 return
(number == 0) 由于数字的二进制表示,可能不会发生。即使添加了一些公差级别,这种方式仍然不完整。您可能需要符合负数。 (10-10 可能不为零)
由于递归性,每次它在函数堆栈中越深,它就会为函数变量和参数消耗更多的内存,直到java无法从操作系统请求更多。
c=阶乘(n)/(阶乘(k)*阶乘(n-k));
对于 n=5 和 k=15,
factorial(n-k) would become: factorial(-10)
然后..
number*factorial(number-1) would give us: -10*factorial(-11),
像这样它会
continue indefinitely never reaching 0.
因此堆栈会溢出。
我尝试将 long
和 double
与 c, k, n
变量一起使用,但 netbeans 显示堆栈溢出错误:
public class Main {
public static void main(String[] args) {
double c=0; //combinatorial
double n=5;
double k=15;
c= factorial(n)/(factorial(k)*factorial(n-k));
System.out.print(n+" combinatorial "+k+" between "+c+"\n");
}
static double factorial (double number) {
if (number == 0)
return 1;
else
return number * factorial(number-1);
}
}
Exception in thread "main" java.lang.WhosebugError
at co.combinatorial.Main.factorial(Main.java:26)
at co.combinatorial.Main.factorial(Main.java:29)
at co.combinatorial.Main.factorial(Main.java:29)
at co.combinatorial.Main.factorial(Main.java:29)
......
Java 结果:1
我必须使用整数文字还是 long.parselong
我做错了什么?
根据初始值,n-k = -10。由于这小于 0,因此您的阶乘方法永远不会 return
(number == 0) 由于数字的二进制表示,可能不会发生。即使添加了一些公差级别,这种方式仍然不完整。您可能需要符合负数。 (10-10 可能不为零)
由于递归性,每次它在函数堆栈中越深,它就会为函数变量和参数消耗更多的内存,直到java无法从操作系统请求更多。
c=阶乘(n)/(阶乘(k)*阶乘(n-k));
对于 n=5 和 k=15,
factorial(n-k) would become: factorial(-10)
然后..
number*factorial(number-1) would give us: -10*factorial(-11),
像这样它会
continue indefinitely never reaching 0.
因此堆栈会溢出。