/**
 * Harmonic
 *
 * @author J.K. Daugherty
 */
public class Harmonic {

    // Recursive version...
    public static double harmonic1 (int n) {
        if (n == 0) {
            return 0.0;
        }
        else {
            return harmonic1 (n - 1) + 1.0 / n;
        }
    }

    // Non-recursive (iterative) version...
    public static double harmonic2 (int n) {
        double harmonic = 0.0;
        for (int i = 1; i <= n; i++) {
            harmonic += 1.0 / i;
        }
        return harmonic;
    }

    public static void main(String[] args) {
        while (true) {
            System.out.print ("Enter a nonnegative integer n (-1 to exit): ");
            int n = StdIn.readInt();
            if (n < 0)
                break;
            else {
                System.out.println ("H(" + n + ") = "
                        + harmonic1 (n) + " (recursive)");
                System.out.println ("H(" + n + ") = "
                        + harmonic2 (n) + " (iterative)");
            }
        }
    }
}
