java中的函数方法

java中的函数方法,java,Java,我试图理解一段代码,我知道它是如何工作的。我的代码是一个递归的例子,试图计算一个数字作为第n个骰子滚动结果的概率。我的代码如下: public static double f(int sum, int r) { if (r== 0) { if (pr(s) ){ return 1; } else return 0; } double rsum = 0; for (int i = 1; i <= 6; i++) { rsum += f(

我试图理解一段代码,我知道它是如何工作的。我的代码是一个递归的例子,试图计算一个数字作为第n个骰子滚动结果的概率。我的代码如下:

public static double f(int sum, int r) {

if (r== 0) { 
  if (pr(s) ){ 
      return 1; 
  }
  else 
    return 0; 
}

double rsum = 0; 

for (int i = 1; i <= 6; i++) { 
  rsum += f(sum + i, r- 1)/6.0; 
}
return rsum;
}
公共静态双f(整数和,整数r){
如果(r==0){
如果(pr(s)){
返回1;
}
其他的
返回0;
}
双rsum=0;

对于(int i=1;i f(2,1)而不是f(3,0),它再次转到ev3(2,1)知道为什么会发生这种情况吗?

函数的目的似乎是平均6个不同的(1,2,3,4,5,6)卷。它将滚动ft次,直到到达底部。基本上,如果所有滚动的总和为3、5、6、11、13或17,则提供值100,否则从总返回值中减去50

递归似乎在寻找给定所有可能滚动的概率


实际上,对于
sum=0
rollsLeft=n
而言,该值是静态的,这意味着您可以手动预计算该值,而不是在运行时进行计算。

您的函数会对一些骰子滚动的所有可能排列进行迭代,并为它们提供一些度量。它被递归多次调用:

  • 最初一次(不是递归)
  • 第一次掷骰子的所有可能结果为6次
  • 第二次掷骰的所有可能结果为62次(第一次掷骰的每个可能结果为6次)
  • 第n次掷骰的所有可能结果的6n次

您的函数计算一些自定义度量,但如果您将100替换为1,-50替换为0,并将
sum==3 | | sum==5 | | sum==7 | | sum==11 | sum==13 | sum==17
表达式泛化为
isPrime(sum)
函数,您将能够计算n个骰子滚动的总和成为素数的概率。

使用一个带有逐步调试的调试器来查看它是如何工作的,并用纸和铅笔写下它可能会有帮助:?如果没有,用谷歌搜索“理解递归”完成几个最重要的答案可能是值得的?System.out.println(ev3(0,3));这是我从main调用来获取结果的,我不明白是否用这种方法通过了所有三个骰子。counte和counter1没有用,我只是为了快速调试而放它们。您还缺少函数的最终返回语句。您可能需要再次检查您发布的所有源代码。我不明白是否通过了所有骰子这种方法有三个骰子。我唯一关心的是理解递归函数中的和是如何代表骰子的实际和的。不幸的是,我不知道你计算的最终返回值是什么意思-但是我知道它不计算在多次掷骰子后得到素数和的概率。就像我之前说过的那样但是,要做到这一点,当你得到素数和时,你需要加1(而不是100),当你得到非素数和时,你需要加0(而不是-50)。你可以尝试并比较这两种方法的曲线图,看看其中一种方法是否能很好地近似另一种方法(我假设不是)。100和50的问题是因为我计算的东西稍有不同。但这不是我的问题。我的问题是理解和是如何工作的。哦,让我重新阅读你的评论。如果你仍然不确定如何使用递归调用:
sum
是累加器吗存储某些排列的骰子和。因此,对于所有3个骰子滚动都是6s的递归分支,
rollsLeft
降到0时,
sum
将是18。另一方面,
rsum
是您希望在最后返回的度量,并且对于r的所有非叶分支,您的函数将返回
rsum
问题是当我调试我的程序sum变量时,它的值没有超过13,所以有些事情进展得不太顺利。