You are on page 1of 2

import java.util.

Scanner;
import java.math.BigInteger;

public class Main {


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.");
}
}
}

You might also like