Program for Fibonacci numbers
The Fibonacci numbers are the numbers in the following integer sequence.
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ……..
In mathematical terms, the sequence Fn of Fibonacci numbers is defined by the recurrence relation
Fn = Fn-1 + Fn-2
with seed values
F0 = 0 and F1 = 1.
Method 1 ( Use recursion ):-
int
fib(
int
n)
{
if
(n <= 1)
return
n;
return
fib(n-1) + fib(n-2);
}
Time Complexity: T(n) = T(n-1) + T(n-2) which is exponential.
Method 2 ( Use Dynamic Programming )
-
int fib(int n)
-
{
-
/* Declare an array to store Fibonacci numbers. */
-
int f[n+1];
-
int i;
-
-
/* 0th and 1st number of the series are 0 and 1*/
-
f[0] = 0;
-
f[1] = 1;
-
-
for (i = 2; i <= n; i++)
-
{
-
/* Add the previous 2 numbers in the series
-
and store it */
-
f[i] = f[i-1] + f[i-2];
-
}
-
-
return f[n];
-
}
Time Complexity: O(n)
Extra Space: O(n)
Method 3 ( Space Optimized Method 2 )
int
fib(
int
n)
{
int
a = 0, b = 1, c, i;
if
( n == 0)
return
a;
for
(i = 2; i <= n; i++)
{
c = a + b;
a = b;
b = c;
}
return
b;
}
Time Complexity: O(n) Extra Space: O(1)
Method 4 ( Using power of the matrix {{1,1},{1,0}} )
This another O(n) which 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 )), then we get the (n+1)th Fibonacci number as the element at row and column (0, 0) in the resultant matrix.
-
#include <stdio.h>
-
-
/* Helper function that multiplies 2 matrices F and M of size 2*2, and
-
puts the multiplication result back to F[][] */
-
void multiply(int F[2][2], int M[2][2]);
-
-
/* Helper function that calculates F[][] raise to the power n and puts the
-
result in F[][]
-
Note that this function is designed only for fib() and won't work as general
-
power function */
-
void power(int F[2][2], int n);
-
-
int fib(int n)
-
{
-
int F[2][2] = {{1,1},{1,0}};
-
if (n == 0)
-
return 0;
-
power(F, n-1);
-
-
return F[0][0];
-
}
-
-
void multiply(int F[2][2], int M[2][2])
-
{
-
int x = F[0][0]*M[0][0] + F[0][1]*M[1][0];
-
int y = F[0][0]*M[0][1] + F[0][1]*M[1][1];
-
int z = F[1][0]*M[0][0] + F[1][1]*M[1][0];
-
int w = F[1][0]*M[0][1] + F[1][1]*M[1][1];
-
-
F[0][0] = x;
-
F[0][1] = y;
-
F[1][0] = z;
-
F[1][1] = w;
-
}
-
-
void power(int F[2][2], int n)
-
{
-
int i;
-
int M[2][2] = {{1,1},{1,0}};
-
-
// n - 1 times multiply the matrix to {{1,0},{0,1}}
-
for (i = 2; i <= n; i++)
-
multiply(F, M);
-
}
-
-
/* Driver program to test above function */
-
int main()
-
{
-
int n = 9;
-
printf("%d", fib(n));
-
getchar();
-
return 0;
-
}
Time Complexity: O(n)
Extra Space: O(1)
Program for Fibonacci numbers
The Fibonacci numbers are the numbers in the following integer sequence.
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ……..
In mathematical terms, the sequence Fn of Fibonacci numbers is defined by the recurrence relation
Fn = Fn-1 + Fn-2
with seed values
F0 = 0 and F1 = 1.
int
fib(
int
n)
{
if
(n <= 1)
return
n;
return
fib(n-1) + fib(n-2);
Time Complexity: T(n) = T(n-1) + T(n-2) which is exponential.
Method 2 ( Use Dynamic Programming )
- int fib(int n)
- {
- /* Declare an array to store Fibonacci numbers. */
- int f[n+1];
- int i;
- /* 0th and 1st number of the series are 0 and 1*/
- f[0] = 0;
- f[1] = 1;
- for (i = 2; i <= n; i++)
- {
- /* Add the previous 2 numbers in the series
- and store it */
- f[i] = f[i-1] + f[i-2];
- }
- return f[n];
- }
Extra Space: O(n)
Method 3 ( Space Optimized Method 2 )
int
fib(
int
n)
{
int
a = 0, b = 1, c, i;
if
( n == 0)
return
a;
for
(i = 2; i <= n; i++)
{
c = a + b;
a = b;
b = c;
}
return
b;
}
Time Complexity: O(n) Extra Space: O(1)
Method 4 ( Using power of the matrix {{1,1},{1,0}} )
This another O(n) which 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 )), then we get the (n+1)th Fibonacci number as the element at row and column (0, 0) in the resultant matrix.
- #include <stdio.h>
- /* Helper function that multiplies 2 matrices F and M of size 2*2, and
- puts the multiplication result back to F[][] */
- void multiply(int F[2][2], int M[2][2]);
- /* Helper function that calculates F[][] raise to the power n and puts the
- result in F[][]
- Note that this function is designed only for fib() and won't work as general
- power function */
- void power(int F[2][2], int n);
- int fib(int n)
- {
- int F[2][2] = {{1,1},{1,0}};
- if (n == 0)
- return 0;
- power(F, n-1);
- return F[0][0];
- }
- void multiply(int F[2][2], int M[2][2])
- {
- int x = F[0][0]*M[0][0] + F[0][1]*M[1][0];
- int y = F[0][0]*M[0][1] + F[0][1]*M[1][1];
- int z = F[1][0]*M[0][0] + F[1][1]*M[1][0];
- int w = F[1][0]*M[0][1] + F[1][1]*M[1][1];
- F[0][0] = x;
- F[0][1] = y;
- F[1][0] = z;
- F[1][1] = w;
- }
- void power(int F[2][2], int n)
- {
- int i;
- int M[2][2] = {{1,1},{1,0}};
- // n - 1 times multiply the matrix to {{1,0},{0,1}}
- for (i = 2; i <= n; i++)
- multiply(F, M);
- }
- /* Driver program to test above function */
- int main()
- {
- int n = 9;
- printf("%d", fib(n));
- getchar();
- return 0;
- }
Hello There,
ReplyDeleteI learnt so much in such little time about
Program for Fibonacci numbers Even a toddler could become smart reading of your amazing articles.
I am working on a C application which uses CSOAP for web services. I have a couple of questions on that. First can anyone please explain whaturl, urn, method are in this soap client example.
Thanks a lot. This was a perfect step-by-step guide. Don’t think it could have been done better.
Merci Beaucoup,
Daniel