#include <stdio.h>
#include <stdlib.h>
long long fib(long long num) {
long long i, fib = 1, n1 = 1, n2 = 0;
if (num <= 0) {
return 0;
}
for (i = 1; i < num; i++) {
fib = n1 + n2;
n2 = n1;
n1 = fib;
}
return fib;
}
int main(int argc, char ** argv) {
long long first, last;
if (argc <= 1) {
printf("Usage: %s <first> [last]\n", argv[0]);
} else {
first = last = strtoll(argv[1], NULL, 10);
if (argc > 2) {
last = strtoll(argv[2], NULL, 10);
}
while (first <= last) {
printf("Fib(%lld) : %lld\n", first, fib(first));
first++;
}
}
return 0;
}
Og det virker:
robert-desktop:~ $ ./fib 40 50
Fib(40) : 102334155
Fib(41) : 165580141
Fib(42) : 267914296
Fib(43) : 433494437
Fib(44) : 701408733
Fib(45) : 1134903170
Fib(46) : 1836311903
Fib(47) : 2971215073
Fib(48) : 4807526976
Fib(49) : 7778742049
Fib(50) : 12586269025
robert-desktop:~ $
...men det rykker selvfølgelig bare grænsen op til et større tal (mindst 64 bits). Vil du have større må du ud i noget bigint snask...GNU's GMP library f.eks.