Недавно я сделал свою собственную последовательность (называемую последовательностью Piggyback), и она работает так:
P(1)
, P(2)
И P(3)
= 1
.
Для всех, P(n)
где n>3
последовательность работает так:
P(n) = P(n-3) + P(n-2)/P(n-1)
Итак, продолжая последовательность:
P(4)
= 1 + 1/1
=2
P(5)
= 1 + 1/2
= 3/2
=1.5
P(6)
= 1 + 2/(3/2)
= 7/3
=2.33333...
P(7)
= 2 + (3/2)/(7/3)
= 37/14
=2.6428571428...
P(8)
= 3/2 + (7/3)/(37/14)
= 529/222
=2.3828828828...
Ваша задача, если дано n
, рассчитать P(n)
либо как число с плавающей запятой, либо (im) правильную дробь.
Это код-гольф , поэтому выигрывает самый короткий код в байтах.
Если кто-то может найти название последовательности, пожалуйста, отредактируйте сообщение соответствующим образом.
P(0)=1
...Ответы:
Python 2,
4039 байт.Дает
True
вместо 1, если это не разрешено, мы можем получить это для 42 байтов:Как это работает, довольно просто, единственный прием, который используется
.0+
для приведения результата к плавающей точке.источник
x<4
иor
f(x-1.)
для приведения в плавающее положение. В Python 3 вам вообще не нужно кастовать.Хаскель, 32 байта
Пример использования:
((0#1)1!!) 7
->2.642857142857143
. Я начинаю последовательность с0, 1, 1
исправления!!
индексации на основе 0.Редактировать: @xnor нашел способ переключения с индекса на основе 0 на 1, без изменения количества байтов.
источник
(0,1,1)
.Рубин, 34 байта
Поскольку в Ruby по умолчанию используется целочисленное деление, оказывается, что вместо него использовать дроби. Предложения по игре в гольф приветствуются.
источник
Perl 6 ,
2523 байтаОбъяснение:
Это возвращает Rat ( Rational ) для входных данных, начиная с 3 до тех пор, пока результат не начнет иметь знаменатель больше, чем может поместиться в 64-разрядном целом числе, и в этот момент он начинает возвращать Num s (с плавающей запятой).
Последняя Крыса, которую он вернет,
P(11) == 8832072277617 / 2586200337022
Если вы хотите, чтобы он возвращал числа Rational, а не числа с плавающей запятой, вы можете поменять его на следующее, которое вместо этого вернет FatRat .
Тестовое задание:
источник
C, 46 байтов
Ideone
источник
MATL , 15 байт
Попробуйте онлайн!
объяснение
источник
Чеддер , 31 байт
Безголовая версия настолько ясна, что вам не нужно объяснений:
в основном после аргументов функции вы можете указать используемую переменную, которая будет установлена для самой функции. Почему? потому что эта функция будет оптимизирована для хвостового вызова, или, по крайней мере, должна быть.
источник
Javascript (ES6), 31 байт
Простая функция.
источник
P=n=>n<4?1:P(n-3)+P(n-2)/P(n-1)
function
. БитP=n=>[...]
создает анонимную функцию, которая принимает 1 параметр (n). Кроме того, на ES6 возвраты неявны. Итак,P=n=>5
это функция, которая всегда возвращает5
. Вам нужно только заключить тело,{}
если у вас есть более одного утверждения (например,P=n=>{alert(1);console.log(1)}
). Поскольку у вас есть только 1 (большой) оператор (троичный оператор), вы можете забыть{}
.05AB1E ,
1817 байтПопробуйте онлайн!
1 байт благодаря Луису Мендо
источник
Pyth, 20 байтов
Попробуйте онлайн!
источник
Желе , 15 байт
Попробуйте онлайн! или проверьте все контрольные примеры .
Как это устроено
источник
R,
5347 байтЭтот ответ использовал довольно аккуратную функцию
ifelse
:ifelse(Condition, WhatToDoIfTrue, WhatToDoIfNot)
источник
return()
в вашем коде. Но вам также нужно назвать функцию, чтобы ваша рекурсия работалаMathematica, 36 байт
Вот первые несколько терминов:
источник
Дьялог АПЛ, 25 байт
⊃{1↓⍵,⍎⍕' +÷',¨⍵}⍣⎕⊢0 1 1
источник