Eu fiz minha própria sequência recentemente (chamada de sequência Piggyback), e funciona assim:
P(1)
, P(2)
E P(3)
= 1
.
Para todos os P(n)
lugares n>3
, a sequência funciona assim:
P(n) = P(n-3) + P(n-2)/P(n-1)
Então, continuando a sequência:
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...
Sua tarefa é, quando dada n
, calcular P(n)
como um número de ponto flutuante ou uma fração (im) adequada.
Isso é código-golfe , então o código mais curto em bytes vence.
Se alguém puder encontrar o nome da sequência, edite a postagem de acordo.
P(0)=1
...Respostas:
Python 2,
4039 bytes.Dá em
True
vez de 1, se isso não for permitido, podemos ter isso por 42 bytes:A maneira como funciona é bem direta, o único truque é usar
.0+
para converter o resultado em um float.fonte
x<4
eor
f(x-1.)
cast para flutuar. No Python 3, você não precisa transmitir nada.Haskel, 32 bytes
Exemplo de uso:
((0#1)1!!) 7
->2.642857142857143
. Começo a sequência com0, 1, 1
para corrigir!!
a indexação baseada em 0.Edit: @xnor encontrou uma maneira de mudar do índice baseado em 0 para o baseado em 1, sem alterar a contagem de bytes.
fonte
(0,1,1)
.Ruby, 34 bytes
Como Ruby usa a divisão inteira por padrão, verifica-se que é mais curto usar frações. Sugestões de golfe são bem-vindas.
fonte
Perl 6 ,
2523 bytesExplicação:
Isso retorna um Rat ( Rational ) para entradas que começam com 3 até o resultado começar a ter um denominador maior do que pode caber em um número inteiro de 64 bits; nesse ponto, ele começa a retornar Num s (ponto flutuante).
O último rato que ele retornará é
P(11) == 8832072277617 / 2586200337022
Se você desejar retornar números Rational em vez de floats, poderá trocá-lo pelo seguinte, que retornará um FatRat .
Teste:
fonte
C, 46 bytes
Ideone
fonte
MATL , 15 bytes
Experimente online!
Explicação
fonte
Cheddar , 31 bytes
A versão ungolfed é tão clara que você não precisa de explicação:
basicamente após os argumentos da função, você pode especificar a variável a ser usada, que será definida para a própria função. Por quê? porque essa função será otimizada pela chamada final, ou pelo menos deveria ser.
fonte
Javascript (ES6), 31 bytes
Uma função simples.
fonte
P=n=>n<4?1:P(n-3)+P(n-2)/P(n-1)
function
. O bitP=n=>[...]
está criando uma função anônima que leva 1 parâmetro (n). Além disso, no ES6, os retornos estão implícitos. Então,P=n=>5
é uma função que sempre retorna5
. Você só precisa incluir o corpo{}
se tiver mais de uma declaração (por exemplo:)P=n=>{alert(1);console.log(1)}
. Como você possui apenas 1 (grande) instrução (o operador ternário), pode esquecer a{}
.05AB1E ,
1817 bytesExperimente online!
Guardado 1 byte graças a Luis Mendo
fonte
Pitão, 20 bytes
Experimente online!
fonte
Gelatina , 15 bytes
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
R,
5347 bytesEsta resposta fez uso da função bastante interessante
ifelse
:ifelse(Condition, WhatToDoIfTrue, WhatToDoIfNot)
fonte
return()
código. Mas você também precisa nomear a função para que seu recursão ao trabalhoMathematica, 36 bytes
Aqui estão os primeiros termos:
fonte
Dyalog APL, 25 bytes
⊃{1↓⍵,⍎⍕' +÷',¨⍵}⍣⎕⊢0 1 1
fonte