what is 'N'?
do you mean 46?
Printable View
Code:
#include <stdio.h>
#define N 8
int main(void)
{
int F[46] = {0, 1};
int i;
for (i = 2; i <= N; i++)
F[i] = F[i-1] + F[i-2];
printf("%d\n", F[N]);
return 0;
}
//I'm sorry, I mean 'F[8]' , heihei
Posting solutions directly is a bad way of teaching anyone anything.
Apart from not knowing whether saria777 has covered arrays yet, saria777 looks to have worked out about as much as liyanhong posted anyway, but without unnecessarily using a fixed-sized array, which incidentally is too small (as is the data type).
As for the bugs:
Take a closer look at laserlight's first post. You didn't follow the advice fully.
Check the places your brackets are. Indent the code properly and make sure everything is either inside or outside of where it should be.
Don't forget to actually return something.
Right what you said!!
I think the best solution is to implement the Fibonacci algorithm iteratively, as you have already said. Infact it takes much less memory and time (on an input n = 58, F(58) with the recursion takes ≈ 4 hours, while iteratively only ≈ 0.7 millionths of a second)!
Here my pseudocode algorithm for Fibonacci, using cycles instead of recursion for calculating the n-th Fibonacci number :
Algorithm Fibonacci4 (int n) --> int
1. a <-- 1, b <-- 1
2. for i = 3 to n do
3. c <-- a + b
4. a <-- b
5. b <-- c
6. return b.
I hope it could be of a little help! Bye!! ;)
saria777, concerning the range of numbers that you are supposed to accommodate: check with your teacher. If you are allowed to compile with respect to the 1999 edition of the C standard, then you have access to unsigned long long, which would allow you to handle F(93). But F(100) really is beyond reach unless you use a non-standard bignum library, or code your own (which would be an entirely different project, and in some ways more difficult than what you are supposed to solve here). Otherwise, your teacher may tell you that this was an oversight, and perhaps you only need to deal with at most F(47).
alrighty. I've got it to compile /finally/. And yes, when it gets so large it begins showing negative numbers.
Also, it's showing them as F5 being 5, F6 being 8, F7 being 13, F8 being 21, when it should be F5 being 8, F6 being 13, F7 being 21, etc. What would I need to make my int previous and result and i= to make it display the way I want?Code:#include <stdio.h>
int Fibonacci (int n);
int main ()
{
long result;
long number;
printf("Enter an integer: ");
scanf("%ld", &number);
result=Fibonacci(number);
printf("Fibonacci(%ld)=%ld/n",number,result);
return 0;
}
int Fibonacci (int n)
{
int previous= 0;
int result =1;
int i;
for (i=2; i <=n; ++i)
{
int const sum=result + previous;
previous= result;
result = sum;
}
return result;
}
Your solution agrees with this Fibonacci table here:
PlanetMath: list of Fibonacci numbers
Your teacher has the sequence advanced by one... so if your teacher wanted 21 as an answer for input 7, just add 1 to user input and proceed.
Or callCode:Fibonacci(number + 1);
Oh, I didn't notice that he had to find large fibonacci numbers, i'm sorry, in this case the only solution is to use strings and int arrays to store big numbers, I made an algorithm to find fibonacci numbers up to 5000 once, my solution was to precalculate into a matrix all fibonacci numbers untill n = 5000 by doing string addition