Java – arithmetic recursion

I am trying to write a code to calculate the following for a given integer n:

1/1 + 1/2 + 1/3 ... + 1/n

This is the code I have written so far:

public class RecursiveSum
{
  public static double Sumto(int n)
  {
    if (n == 0) { return 0.0; }
    else if (n > 0) { return 1/n + 1/Sumto(n - 1); }
    else { throw new IllegalArgumentException("Please provide positive integers"); }
  }
  public static void main(String[] args)
  {
    System.out.println(Sumto(5));
  }
}

However, it always outputs:

Infinity

What's the problem and how can I solve it?

thank you

Solution

You have two questions:

You must perform floating-point division (i.e. replace 1 / N with 1.0 / N) and sumto (n – 1) should be added to 1.0 / N to get sumto (n)

public static double Sumto(int n)
  {
    if (n == 0) { return 0.0; }
    else if (n > 0) { return 1.0/n + Sumto(n - 1); }
    else { throw new IllegalArgumentException("Please provide positive integers"); }
  }

The reason for getting infinity is that when sumto (n – 1) is 0.0 and sumto (0) is 0.0, 1 / sumto (n – 1) returns infinity

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>