История изменений
Исправление jpegqs, (текущая версия) :
Что за фигню я читаю? Зачем выделять память для массива, когда нужно лишь два последних элемента.
#include <stdlib.h>
#include <stdio.h>
static unsigned long long fib(int n) {
unsigned long long a = n & 1, b = 1;
if (n < 0) return -1;
if (n >>= 1) do b += a += b; while (--n);
return a;
}
int main(int argc, char **argv) {
argc > 1 && printf("%llu\n", fib(atoi(argv[1])));
}
Исходная версия jpegqs, :
Что за фигню я читаю? Зачем выделять память для массива, когда нужно лишь два последних элемента.
#include <stdlib.h>
#include <stdio.h>
static unsigned long long fib(int n) {
unsigned long long a = 0, b = 1;
if (n < 0) return -1;
for (; n > 1; n -= 2) a += b, b += a;
return n & 1 ? b : a;
}
int main(int argc, char **argv) {
argc > 1 && printf("%llu\n", fib(atoi(argv[1])));
}