【发布时间】:2013-04-25 15:59:19
【问题描述】:
我将如何使用递归来计算用给定数量的骰子滚动某个数字 r 的概率?我试图将其视为一个选择问题,但对于算法应该如何工作仍然很困惑。
例如,它应该是这样的:
P(4,14)=(1/6)P(3,13)+(1/6)P(3,12)+(1/6)P(3,11)+(1/6 )P(3,10)+(1/6)P(3,9)+(1/6)P(3,8)
P(3,8)=(1/6)P(2,7)+(1/6)P(2,6)+(1/6)P(2,5)+(1/6 )P(2,4)+(1/6)P(2,3)+(1/6)P(2,2)
P(2,4)=(1/6)P(1,3)+(1/6)P(1,2)+(1/6)P(1,1)+(1/6 )P(1,0)+(1/6)P(1,-1)+(1/6)P(1,-2)
=(1/6)(1/6)+(1/6)(1/6)+(1/6)(1/6)+(1/6)(0)+(1/6 )(0)+(1/6)(0)
我只是无法将其转换为代码。
static double P(int dice, int r) {
int ret = 1;
for (int i = 2; i < 7; i++) {
ret = (1/6)(ret*(dice-i))/(i+1);
}
return ret;
}
static double RollDice(int dice,int r) {
if (dice==1 && (r<1 || r>6)){
return 0;
}
if (dice==1 && (r>=1 && r<=6)){
return (1.0/6);
}
else {
return ((1.0/6)*P(dice-1,r-1));
}
【问题讨论】:
-
我已经有一段时间没有做统计工作了,但是你用 P(4, 14) 断言什么?为什么划定出现在 (3, 8) 和 (2, 4) 周围?我很困惑。
-
看起来像家庭作业 ;) 你的任务的完整文本是什么。我不太确定在滚动和计数中将递归放在哪里
-
通过使用递归,我们可以将问题简化为单个骰子在 1 - 6 之间掷出 # 的概率。因此,P(4, 14) 可以表示为 (1 /6)P(3,13) - (1/6)P(3,8) 可以再次表示为 (1/6)P(2,7) 等等,直到我们得到 dice = 1。至少这是我对问题的理解......
-
好吧,我出去了。很久以前我就记得它是如何工作的。对不起
-
我的问题或多或少是强调它的“为什么”部分。为什么这些功能会减少到那个程度?你使用什么样的数学方法?如果这些只是简单的伯努利试验,那是没有意义的(这可能是我最感兴趣的)。
标签: java