5 8 13 21 34
The Fibonacci numbers are the numbers in the following integer sequence.
0, 1, 1, 2, 3, 5, viii, xiii, 21, 34, 55, 89, 144, ……..
In mathematical terms, the sequence Fn of Fibonacci numbers is defined by the recurrence relation
Fnorthward = Fn-1 + Fn-two
with seed values
F0 = 0 and F1 = 1.
Given a number n, print n-th Fibonacci Number.
Examples:
Input : n = 2 Output : ane Input : n = 9 Output : 34
Write a function int fib(int northward) that returns Fdue north. For instance, if n = 0, then fib() should return 0. If n = 1, then it should return ane. For n > ane, it should render Fn-ane + Fnorth-2
For north = 9 Output:34
The following are different methods to become the nth Fibonacci number.
Method one (Use recursion)
A simple method that is a straight recursive implementation mathematical recurrence relation is given above.
C++
#include <bits/stdc++.h>
using namespace std;
int fib( int n)
{
if (n <= one)
render due north;
render fib(n - 1) + fib(n - 2);
}
int main()
{
int north = 9;
cout << fib(n);
getchar ();
return 0;
}
C
#include <stdio.h>
int fib( int northward)
{
if (n <= 1)
return n;
return fib(north - i) + fib(n - 2);
}
int main()
{
int due north = 9;
printf ( "%d" , fib(north));
getchar ();
render 0;
}
Java
class fibonacci {
static int fib( int n)
{
if (north <= i )
return north;
return fib(n - 1 ) + fib(due north - ii );
}
public static void main(String args[])
{
int northward = 9 ;
Organisation.out.println(fib(due north));
}
}
Python3
def fibonacci(northward):
if northward < = 1 :
return n
render fibonacci(n - 1 ) + fibonacci(northward - ii )
if __name__ = = "__main__" :
n = 9
print (fibonacci(n))
C#
using System;
public class GFG
{
public static int Fib( int due north)
{
if (n <= ane)
{
render n;
}
else
{
return Fib(n - 1) + Fib(n - 2);
}
}
public static void Main( string [] args)
{
int north = ix;
Console.Write(Fib(northward));
}
}
PHP
<?php
function fib( $n )
{
if ( $n <= 1)
return $n ;
return fib( $n - 1) +
fib( $n - 2);
}
$n = nine;
echo fib( $n );
?>
Javascript
<script>
permit n = 9;
function fib(north) {
if (n <= one)
return north;
render fib(due north-1) + fib(n-2);
}
certificate.write(fib(northward));
</script>
Time Complication: Exponential, as every function calls two other functions.
If the original recursion tree were to be implemented then this would take been the tree but now for n times the recursion part is called
Original tree for recursion
fib(5) / \ fib(iv) fib(3) / \ / \ fib(3) fib(ii) fib(two) fib(1) / \ / \ / \ fib(2) fib(1) fib(1) fib(0) fib(1) fib(0) / \ fib(1) fib(0)
Optimized tree for recursion for code above
fib(5)
fib(four)
fib(3)
fib(2)
fib(1)
Extra Space: O(n) if we consider the part call stack size, otherwise O(1).
Method two: (Use Dynamic Programming)
We can avert the repeated work done in method one by storing the Fibonacci numbers calculated and so far.
C++
#include<$.25/stdc++.h>
using namespace std;
class GFG{
public :
int fib( int northward)
{
int f[northward + ii];
int i;
f[0] = 0;
f[1] = i;
for (i = 2; i <= northward; i++)
{
f[i] = f[i - 1] + f[i - 2];
}
return f[due north];
}
};
int main ()
{
GFG thou;
int n = 9;
cout << g.fib(due north);
return 0;
}
C
#include<stdio.h>
int fib( int north)
{
int f[northward+two];
int i;
f[0] = 0;
f[ane] = 1;
for (i = 2; i <= northward; i++)
{
f[i] = f[i-1] + f[i-two];
}
render f[n];
}
int main ()
{
int n = 9;
printf ( "%d" , fib(n));
getchar ();
return 0;
}
Coffee
public class fibonacci
{
static int fib( int n)
{
int f[] = new int [n+ 2 ];
int i;
f[ 0 ] = 0 ;
f[ 1 ] = 1 ;
for (i = 2 ; i <= northward; i++)
{
f[i] = f[i- 1 ] + f[i- ii ];
}
return f[n];
}
public static void main (String args[])
{
int n = 9 ;
System.out.println(fib(n));
}
};
Python3
def fibonacci(n):
f = [ 0 , 1 ]
for i in range ( 2 , north + ane ):
f.append(f[i - 1 ] + f[i - ii ])
return f[north]
print (fibonacci( 9 ))
C#
using System;
class fibonacci {
static int fib( int n)
{
int []f = new int [n + ii];
int i;
f[0] = 0;
f[1] = 1;
for (i = two; i <= n; i++)
{
f[i] = f[i - 1] + f[i - two];
}
return f[n];
}
public static void Main ()
{
int n = ix;
Console.WriteLine(fib(northward));
}
}
PHP
<?php
function fib( $northward )
{
$f = array ();
$i ;
$f [0] = 0;
$f [1] = i;
for ( $i = 2; $i <= $due north ; $i ++)
{
$f [ $i ] = $f [ $i -one] + $f [ $i -two];
}
return $f [ $n ];
}
$n = 9;
echo fib( $northward );
?>
Javascript
<script>
part fib(n)
{
allow f = new Array(n+two);
let i;
f[0] = 0;
f[i] = one;
for (i = ii; i <= northward; i++)
{
f[i] = f[i-1] + f[i-2];
}
return f[north];
}
let northward=9;
certificate.write(fib(n));
</script>
Time complexity: O(n) for given n
Auxiliary space: O(north)
Method 3: (Space Optimized Method ii)
Nosotros tin can optimize the space used in method ii by storing the previous two numbers only because that is all we need to get the next Fibonacci number in series.
C++
#include<$.25/stdc++.h>
using namespace std;
int fib( int n)
{
int a = 0, b = i, c, i;
if ( n == 0)
return a;
for (i = 2; i <= due north; i++)
{
c = a + b;
a = b;
b = c;
}
return b;
}
int main()
{
int n = 9;
cout << fib(n);
return 0;
}
C
#include<stdio.h>
int fib( int n)
{
int a = 0, b = i, c, i;
if ( n == 0)
return a;
for (i = 2; i <= due north; i++)
{
c = a + b;
a = b;
b = c;
}
return b;
}
int main ()
{
int n = 9;
printf ( "%d" , fib(northward));
getchar ();
return 0;
}
Java
public form fibonacci
{
static int fib( int n)
{
int a = 0 , b = ane , c;
if (n == 0 )
render a;
for ( int i = two ; i <= due north; i++)
{
c = a + b;
a = b;
b = c;
}
return b;
}
public static void main (Cord args[])
{
int n = nine ;
System.out.println(fib(n));
}
};
Python3
def fibonacci(n):
a = 0
b = 1
if n < 0 :
print ( "Incorrect input" )
elif due north = = 0 :
render a
elif due north = = 1 :
return b
else :
for i in range ( ii ,north + 1 ):
c = a + b
a = b
b = c
return b
print (fibonacci( 9 ))
C#
using System;
namespace Fib
{
public class GFG
{
static int Fib( int north)
{
int a = 0, b = 1, c = 0;
if (n == 0) return a;
for ( int i = 2; i <= n; i++)
{
c = a + b;
a = b;
b = c;
}
return b;
}
public static void Main( string [] args)
{
int n = 9;
Panel.Write( "{0} " , Fib(due north));
}
}
}
PHP
<?php
function fib( $n )
{
$a = 0;
$b = 1;
$c ;
$i ;
if ( $north == 0)
return $a ;
for ( $i = 2; $i <= $northward ; $i ++)
{
$c = $a + $b ;
$a = $b ;
$b = $c ;
}
render $b ;
}
$north = 9;
echo fib( $north );
?>
Javascript
<script>
function fib(n)
{
let a = 0, b = i, c, i;
if ( n == 0)
return a;
for (i = 2; i <= n; i++)
{
c = a + b;
a = b;
b = c;
}
return b;
}
permit n = 9;
certificate.write(fib(n));
</script>
Fourth dimension Complexity: O(n)
Actress Space: O(ane)
Method 4: Using power of the matrix {{one, one}, {1, 0}}
This is some other O(n) that relies on the fact that if we n times multiply the matrix M = {{1,1},{1,0}} to itself (in other words calculate power(M, n)), and then we become the (n+1)th Fibonacci number as the element at row and cavalcade (0, 0) in the resultant matrix.
The matrix representation gives the following closed expression for the Fibonacci numbers:
C++
#include<$.25/stdc++.h>
using namespace std;
void multiply( int F[two][2], int M[two][2]);
void power( int F[ii][2], int due north);
int fib( int due north)
{
int F[ii][2] = { { 1, 1 }, { one, 0 } };
if (n == 0)
render 0;
power(F, north - 1);
return F[0][0];
}
void multiply( int F[2][2], int K[2][2])
{
int ten = F[0][0] * M[0][0] +
F[0][ane] * M[1][0];
int y = F[0][0] * M[0][1] +
F[0][1] * M[i][1];
int z = F[ane][0] * M[0][0] +
F[1][1] * M[1][0];
int w = F[ane][0] * M[0][1] +
F[1][one] * Chiliad[1][1];
F[0][0] = 10;
F[0][i] = y;
F[1][0] = z;
F[1][i] = westward;
}
void power( int F[two][two], int northward)
{
int i;
int M[2][2] = { { 1, i }, { 1, 0 } };
for (i = 2; i <= northward; i++)
multiply(F, 1000);
}
int main()
{
int n = 9;
cout << " " << fib(n);
return 0;
}
C
#include <stdio.h>
void multiply( int F[2][ii], int M[two][two]);
void power( int F[two][ii], int n);
int fib( int n)
{
int F[two][2] = {{1,1},{1,0}};
if (n == 0)
return 0;
ability(F, due north-1);
return F[0][0];
}
void multiply( int F[2][2], int M[2][2])
{
int x = F[0][0]*K[0][0] + F[0][i]*M[1][0];
int y = F[0][0]*M[0][one] + F[0][1]*Thou[1][ane];
int z = F[ane][0]*M[0][0] + F[1][1]*Thousand[1][0];
int west = F[1][0]*Grand[0][1] + F[i][ane]*Yard[1][1];
F[0][0] = x;
F[0][1] = y;
F[1][0] = z;
F[1][one] = w;
}
void power( int F[2][two], int n)
{
int i;
int M[two][2] = {{i,1},{1,0}};
for (i = 2; i <= n; i++)
multiply(F, K);
}
int main()
{
int n = ix;
printf ( "%d" , fib(n));
getchar ();
return 0;
}
Java
public class fibonacci
{
static int fib( int n)
{
int F[][] = new int [][]{{ 1 , 1 },{ 1 , 0 }};
if (north == 0 )
return 0 ;
power(F, n- 1 );
return F[ 0 ][ 0 ];
}
static void multiply( int F[][], int M[][])
{
int x = F[ 0 ][ 0 ]*M[ 0 ][ 0 ] + F[ 0 ][ ane ]*M[ one ][ 0 ];
int y = F[ 0 ][ 0 ]*M[ 0 ][ 1 ] + F[ 0 ][ 1 ]*M[ 1 ][ 1 ];
int z = F[ one ][ 0 ]*1000[ 0 ][ 0 ] + F[ 1 ][ one ]*Thou[ ane ][ 0 ];
int w = F[ 1 ][ 0 ]*M[ 0 ][ one ] + F[ 1 ][ 1 ]*Thousand[ one ][ 1 ];
F[ 0 ][ 0 ] = ten;
F[ 0 ][ 1 ] = y;
F[ i ][ 0 ] = z;
F[ ane ][ 1 ] = w;
}
static void ability( int F[][], int northward)
{
int i;
int M[][] = new int [][]{{ ane , 1 },{ 1 , 0 }};
for (i = 2 ; i <= north; i++)
multiply(F, M);
}
public static void main (String args[])
{
int n = ix ;
System.out.println(fib(n));
}
};
Python3
def fib(n):
F = [[ 1 , one ],
[ 1 , 0 ]]
if (n = = 0 ):
return 0
ability(F, due north - 1 )
return F[ 0 ][ 0 ]
def multiply(F, M):
10 = (F[ 0 ][ 0 ] * Grand[ 0 ][ 0 ] +
F[ 0 ][ 1 ] * Chiliad[ ane ][ 0 ])
y = (F[ 0 ][ 0 ] * Thousand[ 0 ][ ane ] +
F[ 0 ][ 1 ] * One thousand[ ane ][ one ])
z = (F[ one ][ 0 ] * M[ 0 ][ 0 ] +
F[ 1 ][ 1 ] * M[ ane ][ 0 ])
west = (F[ 1 ][ 0 ] * M[ 0 ][ 1 ] +
F[ i ][ ane ] * M[ one ][ ane ])
F[ 0 ][ 0 ] = ten
F[ 0 ][ 1 ] = y
F[ i ][ 0 ] = z
F[ i ][ ane ] = westward
def power(F, n):
M = [[ i , 1 ],
[ 1 , 0 ]]
for i in range ( 2 , n + 1 ):
multiply(F, Grand)
if __name__ = = "__main__" :
n = nine
impress (fib(n))
C#
using Arrangement;
class GFG {
static int fib( int n)
{
int [,]F = new int [,] {{1, one},
{1, 0} };
if (northward == 0)
return 0;
power(F, due north-one);
return F[0,0];
}
static void multiply( int [,]F, int [,]G)
{
int x = F[0,0]*Chiliad[0,0] + F[0,1]*M[1,0];
int y = F[0,0]*One thousand[0,1] + F[0,one]*M[1,1];
int z = F[1,0]*M[0,0] + F[1,ane]*M[ane,0];
int w = F[1,0]*Grand[0,i] + F[1,one]*M[1,i];
F[0,0] = x;
F[0,i] = y;
F[1,0] = z;
F[i,1] = w;
}
static void power( int [,]F, int due north)
{
int i;
int [,]Thou = new int [,]{{i, 1},
{1, 0} };
for (i = 2; i <= n; i++)
multiply(F, Chiliad);
}
public static void Main ()
{
int n = nine;
Console.WriteLine(fib(n));
}
}
PHP
<?php
function fib( $due north )
{
$F = array ( array (1, 1),
array (i, 0));
if ( $n == 0)
render 0;
power( $F , $n - 1);
return $F [0][0];
}
function multiply(& $F , & $1000 )
{
$x = $F [0][0] * $Chiliad [0][0] +
$F [0][1] * $M [1][0];
$y = $F [0][0] * $G [0][1] +
$F [0][ane] * $Yard [one][1];
$z = $F [ane][0] * $M [0][0] +
$F [i][ane] * $M [1][0];
$w = $F [1][0] * $Yard [0][1] +
$F [1][1] * $Grand [1][ane];
$F [0][0] = $10 ;
$F [0][1] = $y ;
$F [1][0] = $z ;
$F [ane][1] = $westward ;
}
function power(& $F , $north )
{
$M = array ( array (one, 1),
array (1, 0));
for ( $i = 2; $i <= $north ; $i ++)
multiply( $F , $M );
}
$n = 9;
echo fib( $n );
?>
Javascript
<script>
function fib( n)
{
var F = [ [ 1, 1 ], [ 1, 0 ] ];
if (n == 0)
return 0;
power(F, n - one);
return F[0][0];
}
office multiply( F, Thou )
{
ten = F[0][0] * M[0][0] +
F[0][1] * K[1][0];
y = F[0][0] * 1000[0][1] +
F[0][1] * M[i][1];
z = F[i][0] * M[0][0] +
F[one][1] * M[i][0];
westward = F[1][0] * M[0][1] +
F[i][i] * G[i][ane];
F[0][0] = x;
F[0][i] = y;
F[i][0] = z;
F[1][1] = westward;
}
function power( F, northward)
{
var i;
var M = [[ 1, ane ], [ 1, 0 ]];
for (i = ii; i <= north; i++)
multiply(F, M);
}
var n = 9;
document.write ( " " + fib(n));
</script>
Time Complexity: O(n)
Actress Infinite: O(1)
Method 5: (Optimized Method 4)
Method 4 can be optimized to work in O(Logn) fourth dimension complexity. We tin can do recursive multiplication to go power(M, north) in the previous method (Similar to the optimization washed in this post)
C++
#include <bits/stdc++.h>
using namespace std;
void multiply( int F[2][two], int 1000[2][ii]);
void ability( int F[ii][2], int n);
int fib( int n)
{
int F[2][2] = {{1, one}, {i, 0}};
if (northward == 0)
return 0;
power(F, north - 1);
render F[0][0];
}
void ability( int F[2][2], int n)
{
if (due north == 0 || northward == 1)
return ;
int One thousand[2][2] = {{1, i}, {one, 0}};
power(F, northward / 2);
multiply(F, F);
if (northward % 2 != 0)
multiply(F, M);
}
void multiply( int F[2][2], int M[2][2])
{
int 10 = F[0][0] * M[0][0] + F[0][ane] * M[i][0];
int y = F[0][0] * M[0][one] + F[0][ane] * M[1][one];
int z = F[1][0] * M[0][0] + F[1][1] * M[i][0];
int westward = F[1][0] * M[0][1] + F[1][1] * M[1][1];
F[0][0] = x;
F[0][one] = y;
F[1][0] = z;
F[i][1] = westward;
}
int master()
{
int n = 9;
cout << fib(nine);
getchar ();
return 0;
}
C
#include <stdio.h>
void multiply( int F[2][2], int G[2][2]);
void power( int F[2][2], int n);
int fib( int n)
{
int F[ii][ii] = {{1,one},{ane,0}};
if (n == 0)
render 0;
power(F, n-i);
return F[0][0];
}
void ability( int F[2][ii], int n)
{
if ( north == 0 || n == 1)
return ;
int Thousand[two][2] = {{1,one},{1,0}};
power(F, n/2);
multiply(F, F);
if (n%2 != 0)
multiply(F, Grand);
}
void multiply( int F[2][2], int Chiliad[2][2])
{
int x = F[0][0]*M[0][0] + F[0][1]*M[1][0];
int y = F[0][0]*M[0][i] + F[0][1]*M[1][i];
int z = F[1][0]*M[0][0] + F[ane][ane]*Chiliad[1][0];
int w = F[1][0]*G[0][1] + F[ane][1]*M[ane][1];
F[0][0] = ten;
F[0][1] = y;
F[1][0] = z;
F[1][1] = w;
}
int main()
{
int n = 9;
printf ( "%d" , fib(9));
getchar ();
return 0;
}
Java
public form fibonacci
{
static int fib( int north)
{
int F[][] = new int [][]{{ one , 1 },{ 1 , 0 }};
if (n == 0 )
render 0 ;
power(F, n- i );
return F[ 0 ][ 0 ];
}
static void multiply( int F[][], int One thousand[][])
{
int x = F[ 0 ][ 0 ]*M[ 0 ][ 0 ] + F[ 0 ][ ane ]*Thou[ one ][ 0 ];
int y = F[ 0 ][ 0 ]*Grand[ 0 ][ 1 ] + F[ 0 ][ i ]*Yard[ 1 ][ 1 ];
int z = F[ 1 ][ 0 ]*Thousand[ 0 ][ 0 ] + F[ i ][ 1 ]*K[ 1 ][ 0 ];
int w = F[ 1 ][ 0 ]*Thousand[ 0 ][ one ] + F[ 1 ][ 1 ]*M[ 1 ][ i ];
F[ 0 ][ 0 ] = x;
F[ 0 ][ 1 ] = y;
F[ one ][ 0 ] = z;
F[ 1 ][ 1 ] = w;
}
static void power( int F[][], int northward)
{
if ( due north == 0 || n == i )
render ;
int Yard[][] = new int [][]{{ i , ane },{ ane , 0 }};
power(F, n/ two );
multiply(F, F);
if (northward% ii != 0 )
multiply(F, M);
}
public static void chief (String args[])
{
int n = 9 ;
System.out.println(fib(north));
}
};
Python3
def fib(n):
F = [[ i , one ],
[ i , 0 ]]
if (n = = 0 ):
return 0
power(F, n - 1 )
return F[ 0 ][ 0 ]
def multiply(F, M):
x = (F[ 0 ][ 0 ] * G[ 0 ][ 0 ] +
F[ 0 ][ 1 ] * Thou[ 1 ][ 0 ])
y = (F[ 0 ][ 0 ] * One thousand[ 0 ][ 1 ] +
F[ 0 ][ 1 ] * M[ 1 ][ 1 ])
z = (F[ i ][ 0 ] * M[ 0 ][ 0 ] +
F[ 1 ][ 1 ] * M[ 1 ][ 0 ])
w = (F[ 1 ][ 0 ] * Thou[ 0 ][ 1 ] +
F[ ane ][ 1 ] * M[ 1 ][ 1 ])
F[ 0 ][ 0 ] = 10
F[ 0 ][ 1 ] = y
F[ i ][ 0 ] = z
F[ 1 ][ i ] = w
def ability(F, due north):
if ( northward = = 0 or northward = = 1 ):
return ;
M = [[ 1 , ane ],
[ i , 0 ]];
power(F, n / / 2 )
multiply(F, F)
if (n % two ! = 0 ):
multiply(F, 1000)
if __name__ = = "__main__" :
n = 9
print (fib(n))
C#
using System;
course GFG
{
static int fib( int n)
{
int [,] F = new int [,]{{i, i},
{1, 0}};
if (due north == 0)
return 0;
power(F, north - i);
return F[0, 0];
}
static void multiply( int [,] F,
int [,] M)
{
int x = F[0, 0] * G[0, 0] +
F[0, 1] * M[ane, 0];
int y = F[0, 0] * M[0, ane] +
F[0, 1] * Grand[1, 1];
int z = F[1, 0] * G[0, 0] +
F[1, 1] * Yard[1, 0];
int west = F[i, 0] * Thou[0, ane] +
F[1, 1] * M[one, ane];
F[0, 0] = ten;
F[0, 1] = y;
F[i, 0] = z;
F[1, 1] = due west;
}
static void power( int [,] F, int n)
{
if ( n == 0 || due north == 1)
return ;
int [,] K = new int [,]{{1, 1},
{1, 0}};
power(F, n / ii);
multiply(F, F);
if (north % two != 0)
multiply(F, Thousand);
}
public static void Main ()
{
int north = 9;
Console.Write(fib(n));
}
}
Javascript
<script>
part fib(northward)
{
var F = [ [ 1, 1 ], [ 1, 0 ] ];
if (northward == 0)
return 0;
power(F, n - 1);
render F[0][0];
}
function multiply(F, Grand)
{
var x = F[0][0] * M[0][0] + F[0][1] * M[ane][0];
var y = F[0][0] * One thousand[0][one] + F[0][1] * Chiliad[i][1];
var z = F[1][0] * G[0][0] + F[i][i] * M[1][0];
var w = F[one][0] * Chiliad[0][1] + F[1][1] * One thousand[1][1];
F[0][0] = x;
F[0][1] = y;
F[1][0] = z;
F[1][1] = w;
}
function power(F, due north)
{
if (north == 0 || n == 1)
return ;
var M = [ [ 1, 1 ], [ i, 0 ] ];
power(F, n / 2);
multiply(F, F);
if (northward % 2 != 0)
multiply(F, M);
}
var n = 9;
document.write(fib(n));
</script>
Fourth dimension Complexity: O(Logn)
Extra Space: O(Logn) if nosotros consider the role call stack size, otherwise O(1).
Method 6: (O(Log n) Fourth dimension)
Below is one more than interesting recurrence formula that can be used to detect n'th Fibonacci Number in O(Log n) time.
If due north is even then k = n/ii: F(northward) = [ii*F(k-1) + F(k)]*F(yard) If n is odd then k = (n + 1)/2 F(n) = F(k)*F(thousand) + F(k-ane)*F(g-one)
How does this formula piece of work?
The formula can be derived from the above matrix equation.
Taking determinant on both sides, nosotros get (-1)n = Fdue north+oneFdue north-1 - Fnorth ii Moreover, since AnAm = An+one thousand for any square matrix A, the following identities tin can be derived (they are obtained from two dissimilar coefficients of the matrix product) FyardFn + Fchiliad-oneFn-1 = Fg+n-ane ---------------------------(i) By putting n = n+1 in equation(1), FmFnorthward+ane + Fm-1Fn = Fm+n --------------------------(2) Putting 1000 = n in equation(i). F2n-1 = Fn 2 + Fnorth-1 two Putting m = due north in equation(ii) F2n = (Fn-i + Fn+1)Fdue north = (2Fn-1 + Fn)Fn (Source: Wiki) -------- ( Past putting Fn+1 = Fn + Fn-1 ) To get the formula to exist proved, nosotros simply need to practice the following If northward is even, we tin can put k = n/ii If n is odd, we can put m = (north+i)/ii
Below is the implementation of the higher up thought.
C++
#include <$.25/stdc++.h>
using namespace std;
const int MAX = chiliad;
int f[MAX] = {0};
int fib( int north)
{
if (n == 0)
return 0;
if (n == 1 || northward == 2)
return (f[north] = 1);
if (f[n])
render f[n];
int thou = (n & 1)? (n+1)/ii : n/ii;
f[due north] = (n & 1)? (fib(1000)*fib(k) + fib(g-ane)*fib(k-1))
: (2*fib(grand-i) + fib(k))*fib(k);
return f[n];
}
int main()
{
int due north = ix;
printf ( "%d " , fib(n));
return 0;
}
Java
import java.util.*;
public class GFG {
static int MAX = m ;
static int f[];
public static int fib( int due north)
{
if (north == 0 )
return 0 ;
if (n == 1 || north == 2 )
return (f[n] = i );
if (f[n] != 0 )
return f[northward];
int k = (north & 1 ) == one ? (n + 1 ) / 2
: due north / ii ;
f[n] = (due north & 1 ) == 1 ? (fib(k) * fib(thou) +
fib(m - one ) * fib(one thousand - one ))
: ( 2 * fib(k - one ) + fib(k))
* fib(k);
return f[north];
}
public static void primary(String[] args)
{
int n = nine ;
f= new int [MAX];
System.out.println(fib(n));
}
};
Python3
MAX = 1000
f = [ 0 ] * MAX
def fib(n) :
if (n = = 0 ) :
render 0
if (northward = = 1 or northward = = 2 ) :
f[northward] = 1
return (f[n])
if (f[n]) :
return f[n]
if ( n & one ) :
1000 = (due north + one ) / / ii
else :
k = n / / 2
if ((n & 1 ) ) :
f[n] = (fib(yard) * fib(k) + fib(thou - 1 ) * fib(k - 1 ))
else :
f[northward] = ( ii * fib(thou - i ) + fib(g)) * fib(k)
return f[n]
n = nine
print (fib(n))
C#
using Organization;
class GFG
{
static int MAX = m;
static int [] f;
public static int fib( int n)
{
if (n == 0)
return 0;
if (n == ane || n == ii)
return (f[due north] = 1);
if (f[n] != 0)
return f[n];
int k = (n & ane) == i ? (north + 1) / two
: n / 2;
f[n] = (north & 1) == 1 ? (fib(k) * fib(chiliad) +
fib(g - 1) * fib(grand - one))
: (2 * fib(thou - i) + fib(k)) *
fib(k);
render f[due north];
}
static void Primary()
{
int n = 9;
f = new int [MAX];
Console.WriteLine(fib(n));
}
}
PHP
<?php
$MAX = grand;
function fib( $n )
{
global $MAX ;
$f = array_fill (0, $MAX , Nada);
if ( $north == 0)
return 0;
if ( $due north == i || $n == 2)
return ( $f [ $n ] = 1);
if ( $f [ $n ])
return $f [ $n ];
$k = ( $n & one) ? ( $n + ane) / ii : $n / 2;
$f [ $n ] = ( $n & 1) ? (fib( $k ) * fib( $k ) +
fib( $one thousand - 1) * fib( $g - 1)) :
(2 * fib( $k - 1) + fib( $k )) * fib( $yard );
return $f [ $n ];
}
$northward = 9;
echo fib( $northward );
?>
Javascript
<script>
const MAX = m;
var f = [...Array(MAX)];
f.fill(0);
role fib(northward) {
if (northward == 0) return 0;
if (north == 1 || n == 2) return (f[northward] = ane);
if (f[north]) return f[n];
var k = n & i ? (northward + ane) / 2 : n / 2;
f[north] =
due north & i
? fib(thou) * fib(g) + fib(1000 - 1) * fib(g - 1)
: (2 * fib(m - 1) + fib(k)) * fib(k);
return f[n];
}
var n = 9;
document.write(fib(northward));
</script>
Fourth dimension complexity: O(Log n), as we divide the trouble in one-half in every recursive call.
Method vii: (Another arroyo(Using Binet's formula))
In this method, we directly implement the formula for the nth term in the Fibonacci series.
Fn = {[(√v + 1)/2] ^ due north} / √five
Note: Above Formula gives correct result only upto for northward<71. Considering as nosotros motion frontward from n>=71 , rounding error becomes significantly large . Although , using floor function instead of round function will give right issue for n=71 . Only afterwards from n=72 , it also fails.
Example: For N=72 , Right result is 498454011879264 but above formula gives 498454011879265.
Reference: http://www.maths.surrey.ac.uk/hosted-sites/R.Knott/Fibonacci/fibFormula.html
C++
#include<iostream>
#include<cmath>
int fib( int northward) {
double phi = (1 + sqrt (5)) / 2;
return circular( prisoner of war (phi, n) / sqrt (5));
}
int main ()
{
int n = ix;
std::cout << fib(n) << std::endl;
return 0;
}
C
#include<stdio.h>
#include<math.h>
int fib( int due north) {
double phi = (1 + sqrt (5)) / 2;
render circular( pow (phi, n) / sqrt (5));
}
int main ()
{
int n = 9;
printf ( "%d" , fib(n));
return 0;
}
Java
import java.util.*;
public class GFG {
static int fib( int n)
{
double phi = ( 1 + Math.sqrt( 5 )) / 2 ;
return ( int )Math.round(Math.pow(phi, northward)
/ Math.sqrt( five ));
}
public static void main(String[] args)
{
int n = 9 ;
Arrangement.out.println(fib(due north));
}
};
Python3
import math
def fibo(due north):
phi = ( 1 + math.sqrt( five )) / 2
return circular ( pow (phi, n) / math.sqrt( 5 ))
if __name__ = = '__main__' :
n = 9
print (fibo(northward))
C#
using System;
public grade GFG
{
static int fib( int n)
{
double phi = (1 + Math.Sqrt(5)) / 2;
render ( int ) Math.Circular(Math.Pow(phi, n)
/ Math.Sqrt(5));
}
public static void Chief()
{
int due north = nine;
Console.WriteLine(fib(n));
}
}
PHP
<?php
part fib( $n )
{
$phi = (1 + sqrt(5)) / 2;
return circular (pow( $phi , $due north ) / sqrt(five));
}
$n = 9;
echo fib( $north ) ;
?>
Javascript
<script>
function fib(due north) {
let phi = (1 + Math.sqrt(5)) / 2;
return Math.round(Math.pw(phi, n) / Math.sqrt(5));
}
allow northward = 9;
document.write(fib(n));
</script>
Fourth dimension Complication : O(logn), this is considering computing phi^n takes logn time
Auxiliary Space : O(1)
Method 8: DP using memoization(Top down approach)
We tin can avoid the repeated work washed in method ane past storing the Fibonacci numbers calculated so far. We only need to store all the values in an array.
C++
#include <bits/stdc++.h>
using namespace std;
int dp[x];
int fib( int n)
{
if (n <= 1)
return n;
int commencement, 2nd;
if (dp[north - i] != -1)
showtime = dp[n - ane];
else
outset = fib(n - 1);
if (dp[n - ii] != -1)
second = dp[n - two];
else
2nd = fib(due north - 2);
return dp[due north] = outset + second;
}
int master()
{
int n = 9;
memset (dp, -1, sizeof (dp));
cout << fib(n);
getchar ();
return 0;
}
Coffee
import coffee.util.*;
public course GFG {
static int [] dp = new int [ 10 ];
static int fib( int n)
{
if (n <= one )
return n;
int first, second;
if (dp[northward - 1 ] != - 1 )
beginning = dp[n - 1 ];
else
commencement = fib(n - one );
if (dp[due north - two ] != - 1 )
second = dp[north - ii ];
else
2d = fib(n - 2 );
return dp[n] = first + 2nd;
}
public static void primary(String[] args)
{
int n = nine ;
Arrays.fill(dp, - 1 );
Organization.out.print(fib(north));
}
};
Python3
dp = [ - 1 for i in range ( 10 )]
def fib(north):
if (due north < = 1 ):
return due north;
global dp;
get-go = 0 ;
second = 0 ;
if (dp[north - 1 ] ! = - i ):
beginning = dp[n - 1 ];
else :
first = fib(n - ane );
if (dp[north - 2 ] ! = - one ):
2nd = dp[north - 2 ];
else :
second = fib(due north - two );
dp[northward] = first + second;
return dp[n] ;
if __name__ = = '__main__' :
n = 9 ;
print (fib(n));
C#
using Organisation;
grade GFG {
static int [] dp = new int [10];
static int fib( int n)
{
if (north <= 1)
return due north;
int first, second;
if (dp[n - 1] != -1)
first = dp[northward - 1];
else
first = fib(n - 1);
if (dp[n - two] != -1)
second = dp[n - 2];
else
2d = fib(northward - 2);
return dp[north] = beginning + 2nd;
}
static void Chief()
{
int n = 9;
Array.Make full(dp, -i);
Console.Write(fib(north));
}
}
Javascript
<script>
dp = Array.from({length: 10}, (_, i) => -1);
function fib(northward)
{
if (n <= one)
render north;
var first, second;
if (dp[n - 1] != -1)
first = dp[n - one];
else
kickoff = fib(n - 1);
if (dp[n - 2] != -1)
second = dp[north - 2];
else
second = fib(due north - 2);
return dp[n] = first + 2nd;
}
var n = 9;
certificate.write(fib(n));
</script>
Related Articles:
Big Fibonacci Numbers in Coffee
Please write comments if you discover the above codes/algorithms wrong, or find other means to solve the aforementioned trouble.
References:
http://en.wikipedia.org/wiki/Fibonacci_number
http://www.ics.uci.edu/~eppstein/161/960109.html
5 8 13 21 34,
Source: https://www.geeksforgeeks.org/program-for-nth-fibonacci-number/
Posted by: walkupthoon1994.blogspot.com

0 Response to "5 8 13 21 34"
Post a Comment