Java 双输出递归函数

Java 双输出递归函数,java,recursion,Java,Recursion,我正在尝试做一个递归函数。我将是一个整数,但是输出将是双精度的。我知道函数不能以双精度开始,但是当函数达到最大“深度”时,我仍然是一个整数。当它将“上升”时,输出将变为双精度,但我不明白为什么该函数不能工作 long sum1(int i) { if(i==1) { return 1; } else { return sum1(i-1) + 1/i; } } 这是我执行此系列的代码: 系列1(i)=1+1/2+1/3+。1/i 输出没有给出错误,但结果计算不正确。首

我正在尝试做一个递归函数。我将是一个整数,但是输出将是双精度的。我知道函数不能以双精度开始,但是当函数达到最大“深度”时,我仍然是一个整数。当它将“上升”时,输出将变为双精度,但我不明白为什么该函数不能工作

long sum1(int i) {
  if(i==1) {
    return 1;
  } else {
    return sum1(i-1) + 1/i;
  }
}
这是我执行此系列的代码:

  • 系列1(i)=1+1/2+1/3+。1/i

  • 输出没有给出错误,但结果计算不正确。

    首先,当
    i
    >1时,
    1将始终为0,因为您要除以两个
    int
    s

    第二,由于返回类型是
    long
    ,任何分数都将被截断

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

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

    首先,当
    i
    >1时,
    1/i
    将始终为0,因为您正在除以两个
    int
    s

    第二,由于返回类型是
    long
    ,任何分数都将被截断

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

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

    错误计算的问题是
    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;
              }
            }
    

    错误计算的问题是
    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;
              }
            }
    

    谢谢,现在可以用了。如果我理解正确,long是整数的一种类型吗?我的老师说做递归函数需要long。@T.v.L.
    long
    是一种整数类型,大小为8字节。与
    int
    (只有4个字节)相比,它可以保存更大(和更小的负值)。递归函数的返回类型取决于需要返回的内容<代码>长
    不一定是必需的。这解释了很多。谢谢,汉克斯,现在可以用了。如果我理解正确,long是整数的一种类型吗?我的老师说做递归函数需要long。@T.v.L.
    long
    是一种整数类型,大小为8字节。与
    int
    (只有4个字节)相比,它可以保存更大(和更小的负值)。递归函数的返回类型取决于需要返回的内容<代码>长
    不一定是必需的。这解释了很多。谢谢