/*
A Java program that tries to add up the first n natural numbers, but fails.
This example shows that unbounded method calls in Java, even if they are
tail-recursive, are a problem.

Note: java on linus seems to be broken, so try this example somewhere else.

% javac SumAcc.java
% java SumAcc 50000
answer is: 1250025000
% java SumAcc 60000
Exception in thread "main" java.lang.StackOverflowError
	at SumAcc.sumAcc(SumAcc.java:7)
	at SumAcc.sumAcc(SumAcc.java:7)
	at SumAcc.sumAcc(SumAcc.java:7)
	...
*/

public class SumAcc {

    public static long sumAcc(long n, long acc) {
        if (n == 0)
            return acc;
        else
            return sumAcc(n - 1, n + acc);
    }

    public static void main(String[] args) {
        long n = 0;

        if (args.length > 0) {
            try {
                n = Long.parseLong(args[0]);
            } catch (NumberFormatException nfe) {
                System.err.println(nfe);
                System.exit(-1);
            }
        }
        System.out.println("answer is: " + sumAcc(n, 0));
    }
}
