You can work with type unsigned long long
that has 64bits
size, making it possible to generate fibonacci sequences up to 91
numbers:
#include <stdio.h>
#include <stdlib.h>
#define MAX_FIBO_SEQ (91)
typedef unsigned long long uint64_t; /* ( (2^64) - 1 ) = 18.446.744.073.709.551.615 max. */
int fibonacci( uint64_t f[], int n )
{
int i = 0;
if( n <= 0 )
return -1;
if( n > MAX_FIBO_SEQ )
n = MAX_FIBO_SEQ; /* Nao permite overflow */
f[0] = 1;
if( n == 1 )
return n;
f[1] = 1;
if( n == 2 )
return n;
for( i = 2; i < n; i++ )
f[i] = f[i - 2] + f[i - 1];
return n;
}
int main( int argc, char * argv[] )
{
int i = 0;
int n = atoi(argv[1]);
uint64_t seq[ MAX_FIBO_SEQ ];
/* Preenche array 'seq' com uma sequencia dos 'n' primeiros
numeros da serie de Fibonacci... */
n = fibonacci( seq, n );
/* Exibe array */
for( i = 0; i < n; i++ )
printf("%s%lld", (i)?", ":"", seq[i] );
printf("\n");
return 0;
}
Test # 1:
$ ./fibo 10
1, 1, 2, 3, 5, 8, 13, 21, 34, 55
Test # 2:
$ ./fibo 91
1, 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, 32951280099, 53316291173, 86267571272, 139583862445, 225851433717, 365435296162, 591286729879, 956722026041, 1548008755920, 2504730781961, 4052739537881, 6557470319842, 10610209857723, 17167680177565, 27777890035288, 44945570212853, 72723460248141, 117669030460994, 190392490709135, 308061521170129, 498454011879264, 806515533049393, 1304969544928657, 2111485077978050, 3416454622906707, 5527939700884757, 8944394323791464, 14472334024676221, 23416728348467685, 37889062373143906, 61305790721611591, 99194853094755497, 160500643816367088, 259695496911122585, 420196140727489673, 679891637638612258, 1100087778366101931, 1779979416004714189, 2880067194370816120, 4660046610375530309