简单的递归谐波方法

时间:2014-09-06 14:12:30

标签: java recursion computer-science

我有一个简单的递归谐波方法:

 public static int harmonicOf(int n)

{ 
  if(n==1)
  {
      return 1;
  }
  return 1/n + harmonicOf(n-1);
}

它始终返回1,我明白为什么会这样做。我也知道,如果我将所有内容从int切换到double,那么它也适用。

我真的很好奇为什么会这样 - 为什么当它发生双重问题时它也不会返回1并且有没有可能的方法来使用int?< / p>

2 个答案:

答案 0 :(得分:1)

如果方法返回int,则1/n + harmonicOf(n-1)被评估为int。这意味着每个1/n n > 1为零。这就是返回1的原因。

如果方法返回float或double,则1/n + harmonicOf(n-1)被计算为float或double(基于harmonicOf(n-1)的返回类型)。这就是为什么1/n也被评估为float或double,并且可以为非零。

答案 1 :(得分:0)

如果你使用整数1 / n,当n> 2时,它将等于零。 这是因为(例如)1/3实际上是0,因为它是按整数计算的。 最后,当你在多次递归后得到0 + harmonicOf(2-1)时,由于harmonicOf(1)为1,它将返回1。

如果你想修复它,不要使用整数,使用浮点数或双精度数。那样,对于任何n> 1的值,1 / n将被评估为小数而不是0