Вы, наверное, все знаете последовательность Фибоначчи:
fibonacci(n)=fibonacci(n-1)+fibonacci(n-2)
fibonacci(0)=0
fibonacci(1)=1
Ваша задача настолько проста, насколько это возможно:
- Дано целочисленное
N
вычислениеfibonacci(n)
но вот поворот:
- Также сделайте отрицательный
N
Подождите. Какая?
fibonacci(1)=fibonacci(0)+fibonacci(-1)
так
fibonacci(-1)=1
а также
fibonacci(-2)=fibonacci(0)-fibonacci(1)=-1
и так далее...
- Это код-гольф, поэтому выигрывают самые короткие программы в байтах.
- Вы можете отправить функцию или полную программу
- N находится в [-100,100]
Тестовые примеры в CSV:
-9;-8;-7;-6;-5;-4;-3;-2;-1;0;1;2;3;4;5;6;7;8
34;-21;13;-8;5;-3;2;-1;1;0;1;1;2;3;5;8;13;21
Подсказка:
n <0 и n & 1 == 0:
fibonacci(n)=fibonacci(abs(n))*-1
Ответы:
Mathematica, 9 байт
Да, эта встроенная функция поддерживает отрицательные числа.
источник
Октава, 20 байт
Попробуйте онлайн!
объяснение
Это использует тот факт, что последовательность Фибоначчи
f(n)
может быть записана как (это должна быть матричная векторная запись):Рекурсивный:
Явное:
Это означает, что в правом верхнем углу этой матрицы
n
находится значение, котороеf(n)
мы ищем. Очевидно, что мы также можем инвертировать эту матрицу, так как она имеет полный ранг, и отношение все еще описывает то же самое рекуррентное отношение. Это означает, что это также работает для отрицательных входных данных.источник
ans(-6)
значит быть положительным?Максима, 3 байта
поддерживает положительные и отрицательные числа.
Попробуйте (вставить) на CESGA - Максима на линии
источник
Python, 43 байта
Прямая формула с золотым сечением
g
. Сf
вышеуказанной функцией:Та же длина alt, только псевдоним квадратного корня из 5:
Я не видел способа сделать рекурсивную функцию, которая могла бы конкурировать с ними. Мягкая попытка на 57 байтов:
Для сравнения, итерационный метод (60 байт в Python 2):
Или для 58 байтов:
источник
JavaScript (ES6), 42 байта
Тест
Показать фрагмент кода
источник
МАТЛ ,
119 байтЯ доволен темСпасибо @LuisMendo за -2 байта =)[3,2]
, что, безусловно, можно сыграть в гольф, если кто-нибудь знает способ, пожалуйста, дайте мне знать =) (Это также будет работать[1,3]
.)Это использует тот же подход, что и ответ на Octave . Но для генерации матрицы
мы просто конвертируем число
3
и2
из десятичной в двоичную (т.е.11
и10
).Попробуйте онлайн!
источник
JavaScript (ES7) 37 байт
Использует формулу Бине .
Это выводит
n
го числа Фибоначчи + -0.0000000000000005
.источник
**
требует ES7.1-p
вместо того,-1/p
чтобы работать, дало бы то же самое сохранениеДжольф, 2 байта
Попробуй это здесь!
Встроенные Фибоначчи, реализованные по
phi
формуле.источник
Haskell, 51 байт
источник
,
вместо&&
:even z,z<0
.PowerShell , 112 байт
Демо-звонок:
Выход демо:
источник
Lithp , 88 байт
Мой взгляд на все эти скобки .
Попробуйте онлайн!
Не очень маленький на самом деле. В настоящее время существует ошибка синтаксического анализа, которая требует ее использования,
(get N)
а(+ N)
не простоN
. Я выбрал меньший. Однако я не думаю, что есть что-то, что можно сделать дальше для игры в гольф.источник