LINUX.ORG.RU

История изменений

Исправление 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])));
}