# Python Program - Fibonacci Sequence

Fibonacci terms are generally represented as Fn. A Fibonacci term is the sum of two previous terms and starts with 0 and 1. Mathematically, it can be represented as:

Fn = Fn-1 + Fn-2

With boundary conditions: F0 = 0 and F1 = 1

The Fibonacci Sequence: 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233...

### Method 1: Using Recursive method

In the example below, a recursive function called fib() is created to find out the nth term of Fibonacci sequence.

```def fib(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n-1) + fib(n-2)

print("Fibonacci 5th term:", fib(5))
print("Fibonacci 6th term:", fib(6))
print("Fibonacci 7th term:", fib(7))
```

The above code will give the following output:

```Fibonacci 5th term: 5
Fibonacci 6th term: 8
Fibonacci 7th term: 13
```

### Method 2: Using Dynamic Programming

The Fibonacci term can also be estimated using dynamic programming. As compared to the recursive method, it calculates a specific term of the sequence only once.

```def fib(n):
#creating a list which contains Fibonacci terms
f = [0 for i in range(0,n+1)]
f = 0
f = 1
for i in range(2, n+1):
f[i] = f[i-1] + f[i-2]
return f[n]

print("Fibonacci 6th term:", fib(6))
print("Fibonacci 7th term:", fib(7))
print("Fibonacci 8th term:", fib(8))
```

The above code will give the following output:

```Fibonacci 6th term: 8
Fibonacci 7th term: 13
Fibonacci 8th term: 21
```

### Method 3: Using Short-hand If-else method (Ternary operator)

This can also be achieved using short-hand if-else statements.

```def fib(n):
y = 0 if (n == 0) else 1 if (n == 1) else fib(n-1) + fib(n-2)
return y

print("Fibonacci 8th term:", fib(8))
print("Fibonacci 9th term:", fib(9))
print("Fibonacci 10th term:", fib(10))
```

The above code will give the following output:

```Fibonacci 8th term: 21
Fibonacci 9th term: 34
Fibonacci 10th term: 55
```

### Method 4: Space optimized method

In this method, only three variables are used which changes in each iteration and finally nth term of Fibonacci Sequence is calculated.

```def fib(n):
a, b = 0, 1
c = 0
if n == 0:
return a
for i in range(2, n+1):
c = a + b
a = b
b = c
return b

print("Fibonacci 9th term:", fib(9))
print("Fibonacci 10th term:", fib(10))
print("Fibonacci 11th term:", fib(11))
```

The above code will give the following output:

```Fibonacci 9th term: 34
Fibonacci 10th term: 55
Fibonacci 11th term: 89
```

### Method 5: Using power of matrix

A Fibonacci sequence term can also be calculated as power of matrix. A Fibonacci sequence holds below mentioned property: To calculate Fn, is calculated and A01 will be the Fn.

```def fib(n):
initial = [[1, 1], [1, 0]]
Final = [[1, 1], [1, 0]]
if n == 0:
return 0
else:
for i in range(1, n):
a = Final*initial + Final*initial
b = Final*initial + Final*initial
c = Final*initial + Final*initial
d = Final*initial + Final*initial
Final = a
Final = b
Final = c
Final = d
return Final

print("Fibonacci 10th term:", fib(10))
print("Fibonacci 11th term:", fib(11))
print("Fibonacci 12th term:", fib(12))
```

The above code will give the following output:

```Fibonacci 10th term: 55
Fibonacci 11th term: 89
Fibonacci 12th term: 144
```

5