【发布时间】:2015-09-30 07:28:58
【问题描述】:
每当我尝试这个 for 循环时,都会出现堆栈溢出错误。目标是使用我编辑的二项式分布公式,因为它给我的数学结果不准确。这导致程序产生堆栈溢出错误。我改变了它,所以它编译了,但我希望二项式分布占概率总数的百分比。我遇到了逻辑错误。
for (int numOfSuccesses = 0; numOfSuccesses <= numOfTrials; numOfSuccesses++){
for(int i = 0; i <= numOfTrials; i++){
total+=probability;
}
probability += factorial(numOfTrials)/(factorial(numOfTrials - numOfSuccesses)*factorial(numOfSuccesses));
System.out.println("Probability of " + numOfSuccesses + " successes is: " + probability/total);
}
我确定我是否有堆栈溢出是不正确的,但我想知道这个 for 循环是如何导致堆栈溢出的。另外,如果正确的公式固有地导致堆栈溢出,我该怎么办,我认为它可能会?中断语句?
这是逻辑错误:
输入试验次数:4 输入可能性的数量:5 0 成功的概率是:无穷大 1 次成功的概率是:1.0 2 次成功的概率为:0.36666666666666664 3次成功的概率是:0.17647058823529413 4次成功的概率是:0.1
我修复了异常,但我能得到的最好的就是这一行:
if (n == 0){
在这个单独的阶乘函数中:
public static int factorial(int n){
if (n == 0){
return 1;
}else{
return n * factorial(n - 1);
}
}
}
【问题讨论】:
-
如果我不得不猜测,你有一个基于递归的简单实现
factorial。不过,如果您不想猜测,而是想要一个真正的答案,在您的帖子中包含异常! -
这段代码不足以说明导致溢出的原因。
-
看到这段代码,我认为问题可能源于
factorial(很可能是递归实现的)。请发布整个代码以及StackOverflowException的堆栈跟踪。 -
约翰·斯图尔特:如果你解决了这篇文章的问题,反对票可能会变成赞成票。
-
注意:教科书喜欢使用阶乘函数来演示递归的工作原理。但在现实生活中,递归是一种不好的写法。请改用循环。
标签: java for-loop stack stack-overflow