/**
* Fibonnaci Number
*
* Tags: Math, Recursion, DP
*/
class Fib {
public static void main(String[] args) {
Fib f = new Fib();
for (int n = 0; n <= 10; n++) {
System.out.println(f.fib(n, new int[n+1]));
System.out.println(f.fib2(n));
System.out.println(f.fib3(n));
System.out.println("--------");
}
}
/**
* DP, top-down approach
*/
public int fib(int n, int[] res) {
if (n == 0) return 0;
if (n == 1) return 1;
if (res[n] == 0) res[n] = fib(n - 1, res) + fib(n - 2, res);
return res[n];
}
/**
* DP, bottom-up approach
*/
public int fib2(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
int prev = 0;
int res = 1;
for (int i = 2; i <= n; i++) {
int temp = res;
res += prev;
prev = temp;
}
return res;
}
/**
* Recursion
*/
public int fib3(int n) {
if (n == 0) return 0;
if (n == 1) return 1;
return fib3(n - 1) + fib3(n - 2);
}
}