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