static int fibonacci( int Number ) { if ( Number == 0 || Number == 1 ) { return 1; } else { return fibonacci(Number - 1) + fibonacci(Number - 2); } } static BigInteger fibonacci_nonrecursive (int Number){ assert Number >= 0 : "Fibonacci(n) is only defined for positive n"; if (Number == 0 || Number == 1) { return BigInteger.ONE; } else { BigInteger fib0 = BigInteger.ONE; BigInteger fib1 = BigInteger.ONE; for (int i = 2; i <= Number; i++){ BigInteger fibi = fib0.add(fib1); fib0 = fib1; fib1 = fibi; } return fib1; } }
static BigInteger factorial(BigInteger Number){
assert Number.signum() >= 0 : "Factorial(n) is only defined for positive n"; if (Number.equals(BigInteger.ZERO)){ return BigInteger.ONE; } else { BigInteger factorialOfNMinus1 = factorial(Number.subtract(BigInteger.ONE)); return Number.multiply(factorialOfNMinus1); } }
public static void main(String[] args) {
Scanner in = new Scanner(System.in); while(true){ System.out.println("\n\n Enter a positive integer, or 0 to end: "); int Number = in.nextInt(); if (Number == 0) break; else if (Number < 0) { System.out.println("Please enter a positive integer."); continue; } BigInteger FactorNumber = BigInteger.valueOf(Number); System.out.println("\n Factorial(" + Number + ") is " + factorial(FactorNumber)); if (Number > 40){ System.out.println("\n Number is too big to compute fibonacci recursively."); } else { System.out.println("\n Fibonacci(" + Number + ") is " + fibonacci(Number) + " non-recursively."); } System.out.println("\n Fibonacci(" + Number + ") is " + fibonacci_nonrecursive(Number) + " recursively."); } } }