/**
 * Calculate a fibonacci number
 * 
 * @author Russell C. Bjork
 * @version March 24, 2008
 */
public class Fibonacci
{
    /** Calculate a given fibonacci number
     *  @param n which number is desired (must be >= 1)
     *  @return the nth fibonacci number
     */
    public static int fibonacci(int n) {
        if (n == 1 || n == 2)
            return 1;
        else
            return fibonacci(n-1) + fibonacci(n-2);
    }
    
    /** Non-recursive calculation of a given fibonacci number
     *  @param n which number is desired (must be >= 1)
     *  @return the nth fibonacci number
     */
    public static int nonRecursiveFibonacci(int n) {
        int i = 2;
        int fibIMinus1 = 1;
        int fibI = 1;
        while(i < n) {
            int next = fibIMinus1 + fibI;
            i ++;
            fibIMinus1 = fibI;
            fibI = next;
        }
        return fibI;
    }
}