</>

Technology

Core Java

Difficulty

Beginner

Interview Question

Write a Java program to print Fibonacci series and find factorial of a number.

Answer

Fibonacci Series in Java

Fibonacci: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ... Each number = sum of previous two.

Fibonacci — Iterative (Best for interviews)

Java
public static void printFibonacci(int n) {
    int a = 0, b = 1;
    System.out.print("Fibonacci: ");
    for (int i = 0; i < n; i++) {
        System.out.print(a + " ");
        int next = a + b;
        a = b;
        b = next;
    }
}

printFibonacci(10);  // 0 1 1 2 3 5 8 13 21 34

Fibonacci — Recursive

Java
public static int fibonacci(int n) {
    if (n <= 0) return 0;
    if (n == 1) return 1;
    return fibonacci(n - 1) + fibonacci(n - 2);
}

// Print series
for (int i = 0; i < 10; i++) {
    System.out.print(fibonacci(i) + " ");
}
// 0 1 1 2 3 5 8 13 21 34

Fibonacci — Using Stream (Java 8)

Java
// Generate infinite stream of fibonacci numbers
Stream.iterate(new int[]{0, 1}, f -> new int[]{f[1], f[0] + f[1]})
      .limit(10)
      .map(f -> f[0])
      .forEach(n -> System.out.print(n + " "));
// 0 1 1 2 3 5 8 13 21 34

Fibonacci — Memoized (Dynamic Programming)

Java
Map<Integer, Long> memo = new HashMap<>();

public static long fibMemo(int n) {
    if (n <= 1) return n;
    if (memo.containsKey(n)) return memo.get(n);
    long result = fibMemo(n - 1) + fibMemo(n - 2);
    memo.put(n, result);
    return result;
}

System.out.println(fibMemo(50)); // 12586269025 — fast, no stack overflow

Factorial in Java

Factorial: n! = n × (n-1) × ... × 2 × 1 5! = 5 × 4 × 3 × 2 × 1 = 120

Factorial — Iterative

Java
public static long factorial(int n) {
    if (n < 0) throw new IllegalArgumentException("n must be >= 0");
    if (n == 0 || n == 1) return 1;
    long result = 1;
    for (int i = 2; i <= n; i++) {
        result *= i;
    }
    return result;
}

System.out.println(factorial(5));   // 120
System.out.println(factorial(10));  // 3628800
System.out.println(factorial(0));   // 1 (by convention)

Factorial — Recursive

Java
public static long factorialRecursive(int n) {
    if (n < 0) throw new IllegalArgumentException("n must be >= 0");
    if (n == 0 || n == 1) return 1;
    return n * factorialRecursive(n - 1);
}

Factorial — Java 8 Stream

Java
// Using reduce
public static long factorialStream(int n) {
    return LongStream.rangeClosed(1, n)
                     .reduce(1L, (a, b) -> a * b);
}

System.out.println(factorialStream(5));  // 120

Test Cases

Java
@Test
public void testFactorial() {
    assertEquals(1,        factorial(0));
    assertEquals(1,        factorial(1));
    assertEquals(2,        factorial(2));
    assertEquals(6,        factorial(3));
    assertEquals(120,      factorial(5));
    assertEquals(3628800,  factorial(10));
}

Follow AutomateQA

Related Topics