# Many ways of writing the Fibonacci series program using Java

This is supposed to be a super simple program but how many ways can you write it?
Here are a few.

Program 1  – Fibonacci with 2 temp variables

```public class Fibonacci {
public static void main(String[] args) {
int n = 10;
int f = 0, g = 1;
for (int i = 1; i <= n; i++) {
f = f + g;
g = f - g;
System.out.println(f);
}
}
}```

Program 2 – Fibonacci with 3 temp variables

```public class Fibonacci {
public static void main(String args[])
{
int n = 10;
int f1, f2=0, f3=1;
for(int i=1;i<=num;i++)
{
System.out.print(" "+f3+" ");
f1 = f2;
f2 = f3;
f3 = f1 + f2;
}
}
}```

Program 3 – Fibonacci using recursion

```public class Fibonacci
{
public static void main(String[] args)
{
for(int i=0;i<10;i++)
{
System.out.println(fibonacci(i));
}

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

Program 4 – Fibonacci Using memorization

This method is used to improve the efficiency of our previous algorithms using Memoization. We calculate only the missing values instead of calculating everything everytime.

```public class Fibonacci
{
//Cached object to store intermediate results of fibonacci series
private static Map<Integer,Integer> cache = null;

public static void main(String[] args)
{
cache = new HashMap<Integer, Integer>();
for(int i=0;i<10;i++){
System.out.println(fibonacci(i));
}

}
public static int fibonacci(int n) {
//First check if the value is available in the cache. If yes then take it out from there
if(cache.containsKey(n)){
return cache.get(n);
}
int value = 0;
if(n == 0){
value = 0;
}
else if(n == 1){
value = 1;
}
else{
value = fibonacci(n - 1) + fibonacci(n - 2);
}
//Storing the value in cache
cache.put(n, value);
return value;
}
}```