PHP Examples

PHP 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 function

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

<?php
function fib($n) {
  if ($n == 0)
    {return 0;}
  elseif ($n == 1)
    {return 1;}
  else
    {return fib($n-1) + fib($n-2);}
}

echo "Fibonacci 5th term: ".fib(5)."\n";
echo "Fibonacci 6th term: ".fib(6)."\n";
echo "Fibonacci 7th term: ".fib(7)."\n";
?>

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 function, it calculates a specific term of the sequence only once.

<?php
function fib($n) {
  //creating array which contains Fibonacci terms
  //int f[n+1];
  $f = array();
  $f[0] = 0;
  $f[1] = 1;
  for($i = 2; $i <= $n ; $i++) {
    $f[$i] = $f[$i-1] + $f[$i-2];
  }
  return $f[$n];
}

echo "Fibonacci 6th term: ".fib(6)."\n";
echo "Fibonacci 7th term: ".fib(7)."\n";
echo "Fibonacci 8th term: ".fib(8)."\n";
?>

The above code will give the following output:

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

Method 3: Using Ternary Operator

This can also be achieved using ternary operator.

<?php
function fib($n) {
  $y = ($n == 0)? 0 : (($n == 1) ? 1 : fib($n-1) + fib($n-2));
  return $y;
}

echo "Fibonacci 8th term: ".fib(8)."\n";
echo "Fibonacci 9th term: ".fib(9)."\n";
echo "Fibonacci 10th term: ".fib(10)."\n"; 
?>

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.

<?php
function fib($n) {
  $a = 0; $b = 1; $c = 0;
  if ($n == 0)
    {return $a;}
  for($i = 2; $i <= $n; $i++) {
    $c = $a + $b;
    $a = $b;
    $b = $c;    
  }
  return $b;
}

echo "Fibonacci 9th term: ".fib(9)."\n";
echo "Fibonacci 10th term: ".fib(10)."\n";    
echo "Fibonacci 11th term: ".fib(11)."\n";
?>

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:

power of matrix

To calculate Fn,power of matrixis calculated and A01 will be the Fn.

<?php
function fib($n) {
  $initial = array(array(1,1),array(1,0));
  $Final = array(array(1,1),array(1,0));

  if ($n == 0)
    {return 0;}
  else {      
    for($i = 1; $i < $n ; $i++) {
      $a = $Final[0][0]*$initial[0][0] + $Final[0][1]*$initial[1][0];
      $b = $Final[1][0]*$initial[0][0] + $Final[1][1]*$initial[1][0];
      $c = $Final[0][0]*$initial[0][1] + $Final[0][1]*$initial[1][1];
      $d = $Final[1][0]*$initial[0][1] + $Final[1][1]*$initial[1][1];
      $Final[0][0] = $a;
      $Final[1][0] = $b;
      $Final[0][1] = $c;
      $Final[1][1] = $d;           
    }
  }
  return $Final[0][1];
}

echo "Fibonacci 10th term: ".fib(10)."\n";    
echo "Fibonacci 11th term: ".fib(11)."\n";
echo "Fibonacci 12th term: ".fib(12)."\n";
?>

The above code will give the following output:

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