// --------------
// Fibonacci.java
// --------------

final class Fibonacci {
    /**
     * O(phi^n) in space, where phi = (1 + sqrt(5)) / 2
     * O(phi^n) in time
     * Precondition: n >= 0
     */
    public static long recursive (long n) {
        assert n >= 0;
        if (n < 2)
            return n;
        return recursive(n - 1) + recursive(n - 2);}

    /**
     * O(1) in space
     * O(n) in time
     * Precondition: (n >= 0)
     */
    public static long iterative (long n) {
        assert n >= 0;
        if (n < 2)
            return n;
        long x = 0;
        long y = 1;
        for (long i = 1; i != n; ++i) {
            final long t = x + y;
            x = y;
            y = t;}
        return y;}}

final class FibonacciTest {
    public static void main (String[] args) {
        System.out.println("Fibonacc1.java");

        {
        assert Fibonacci.recursive(0) == 0;
        assert Fibonacci.recursive(1) == 1;
        assert Fibonacci.recursive(2) == 1;
        assert Fibonacci.recursive(3) == 2;
        assert Fibonacci.recursive(4) == 3;
        assert Fibonacci.recursive(5) == 5;
        }

        {
        assert Fibonacci.iterative(0) == 0;
        assert Fibonacci.iterative(1) == 1;
        assert Fibonacci.iterative(2) == 1;
        assert Fibonacci.iterative(3) == 2;
        assert Fibonacci.iterative(4) == 3;
        assert Fibonacci.iterative(5) == 5;
        }

        System.out.println("Done.");}}


syntax highlighted by Code2HTML, v. 0.9.1