双输出

时间:2018-05-10 10:56:47

标签: java recursion

我正在尝试创建一个递归函数。我将是一个整数,但输出将是一个双。我知道函数不能启动双倍,但是当函数达到最大值时,我将仍然是一个整数。什么时候会出现" up"输出将变为double,但我不明白为什么函数不起作用。

long sum1(int i) {
  if(i==1) {
    return 1;
  } else {
    return sum1(i-1) + 1/i;
  }
}

这是我执行此系列的代码:

  1. series1(i)= 1 + 1/2 + 1/3 +。 。 。 1 / I
  2. 输出不会出错,但结果无法正确计算。

2 个答案:

答案 0 :(得分:3)

1/i>时首先i始终为0 1,因为你要划分两个int s。

其次,由于返回类型为long,因此无论如何都会截断任何分数。

您应该返回double以获得准确的结果:

double sum1(int i) {
  if(i==1) {
    return 1.0;
  } else {
    return sum1(i-1) + 1.0/i;
  }
}

答案 1 :(得分:0)

错误计算的问题是sum1(i-1) + 1/i;导致整数计算。当i为整数> 1时,1 / i总是= 0。

只需使用double进行递归,就可以传递int参数。

double sum1(double i) {
          if(i==1) {
            return 1;
          } else {
            return sum1(i-1) + 1/i;
          }
        }