Write a program in C that prints the first 50 Fibonacci numbers, starting with 1 and 2
To be able to answer this question, you need to understand what a fibonacci number is and how to derive a fibonacci sequence.
A fibnonacci number is any number in a sequence which happens to be the sum of the two preceeding numbers.
This means that the number n
in a sequence will be expressed as:
n = (n-1) + (n-2)
For instance, this question states the numbers (1, 2) we should use to start our fibonacci sequence. This means that our sequence will be something like
1
2
1 +2 = 3
3 + 2 = 5
5 + 3 = 8
8 + 5 = 13
This means that if we assign our first two numbers to variables first
and second
and declare another variable called next
, we can go ahead to represent them as.
int first = 1;
int second = 2;
int next = first + second;
In the above case, the next
variable becomes 3
. As soon as we get that one, we need to find what the next one after 3
will be.
Since we are interested in what is after 3
, we will need to reset our first
and second
variables. You will realize that to get the number after 3
, our first variable now becomes 2
and the second variable becomes 3
. This gives us:
first = 2;
second = 3;
next = first + second;
=> next = 2 + 3;
=> next = 5;
The process will then repeated for the variable first
to become 3
and second
become 5
. The next
variable becomes 8
which is 3 + 5
.
I bet you now know how this works. If you don't, kindly go over it again to understand the steps. We can then go ahead and implement this concept as a C program.
Coding a C program that prints the first 50 numbers
Below is the code in C program that does exactly what we have discussed about.
#include <stdio.h>
/**
* main - main block
* Description: Print the first 50 fibonacci numbers, starting with 1 and 2.
* Numbers must be coma and space separated.
* Return: 0
*/
int main(void)
{
int count = 3; /* this is so because the first 2 members have been given already. My loop will therefore begin from the 3rd one */
long int first = 1, second = 2;
long int next = first + second;
printf("%lu, ", first);
printf("%lu, ", second);
while (count <= 50)
{
/* Let's check if we are at the end of the list, if we are close with a new line */
if (count == 50)
{
printf("%lu \n", next);
}
else /* if we are not at the end of the list, add a comma after the number */
{
printf("%lu, ", next);
}
/* Reset the variables to get the next number */
first = second;
second = next;
/* after resetting the variables, you need to find the next number */
next = first + second;
count++;
}
return (0);
}
The output of the above code is:
1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610, 987, 1597, 2584, 4181, 6765, 10946, 17711, 28657, 46368, 75025, 121393, 196418, 317811, 514229, 832040, 1346269, 2178309, 3524578, 5702887, 9227465, 14930352, 24157817, 39088169, 63245986, 102334155, 165580141, 267914296, 433494437, 701408733, 1134903170, 1836311903, 2971215073, 4807526976, 7778742049, 12586269025, 20365011074
Conclusion
I hope you enjoyed reading this and it made you understand how to solve a problem like this. I would like to hear back from you. Is there anything I missed, or explained wrongly, or something you want me to elaborate more on?
Share with me what you also think. Mind you, I am also learning and your feedback will be valuable to me.
Thanks for reading and I would love to connect personally with you. If you are on Twitter, then you can send me a DM and let's have a good chat.