J'ai fait ma propre séquence récemment (appelée la séquence Piggyback), et cela fonctionne comme ceci:
P(1)
, P(2)
et P(3)
= 1
.
Pour tous P(n)
où n>3
, la séquence fonctionne comme ceci:
P(n) = P(n-3) + P(n-2)/P(n-1)
Donc, continuant la séquence:
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...
Votre tâche consiste, une fois donnée n
, à calculer P(n)
soit un nombre à virgule flottante, soit une fraction (im) appropriée.
C'est le code-golf , donc le code le plus court en octets gagne.
Si quelqu'un peut trouver le nom de la séquence, veuillez modifier le message en conséquence.
P(0)=1
...Réponses:
Python 2,
4039 octets.Donne
True
au lieu de 1, si cela n'est pas autorisé, nous pouvons avoir ceci pour 42 octets:La façon dont cela fonctionne est assez simple, la seule astuce consiste
.0+
à lancer le résultat sur un flottant.la source
x<4
etor
f(x-1.)
pour lancer pour flotter. Dans Python 3, vous n'avez pas besoin de caster du tout.Haskel, 32 octets
Exemple d'utilisation:
((0#1)1!!) 7
->2.642857142857143
. Je démarre la séquence avec0, 1, 1
pour corriger!!
l'indexation basée sur 0.Edit: @xnor a trouvé un moyen de passer d'un index basé sur 0 à un index basé sur 1, sans changer le nombre d'octets.
la source
(0,1,1)
.Rubis, 34 octets
Puisque Ruby utilise la division entière par défaut, il s'avère qu'il est plus court d'utiliser des fractions à la place. Suggestions de golf bienvenues.
la source
Perl 6 ,
2523 octetsExplication:
Cela renvoie un Rat ( rationnel ) pour les entrées commençant par 3 jusqu'à ce que le résultat commence à avoir un dénominateur plus grand que ce qui peut tenir dans un entier 64 bits, point auquel il commence à renvoyer Num s (virgule flottante).
Le dernier rat qu'il reviendra est
P(11) == 8832072277617 / 2586200337022
Si vous voulez qu'il retourne des nombres rationnels plutôt que des flottants, vous pouvez l'échanger contre ce qui va retourner un FatRat à la place.
Tester:
la source
C, 46 octets
Ideone
la source
MATL , 15 octets
Essayez-le en ligne!
Explication
la source
Cheddar , 31 octets
La version non golfée est si claire que vous n'avez pas besoin d'explication:
fondamentalement, après les arguments de la fonction, vous pouvez spécifier la variable à utiliser qui sera définie sur la fonction elle-même. Pourquoi? parce que cette fonction sera optimisée pour les appels de queue, ou du moins devrait l'être.
la source
Javascript (ES6), 31 octets
Une fonction simple.
la source
P=n=>n<4?1:P(n-3)+P(n-2)/P(n-1)
function
. Le bitP=n=>[...]
crée une fonction anonyme qui prend 1 paramètre (n). De plus, sur ES6, les retours sont implicites. Donc,P=n=>5
c'est une fonction qui revient toujours5
. Vous ne devez enfermer le corps que{}
si vous avez plusieurs déclarations (par exemple:)P=n=>{alert(1);console.log(1)}
. Puisque vous n'avez qu'une seule (grande) instruction (l'opérateur ternaire), vous pouvez oublier le{}
.05AB1E ,
1817 octetsEssayez-le en ligne!
1 octet enregistré grâce à Luis Mendo
la source
Pyth, 20 octets
Essayez-le en ligne!
la source
Gelée , 15 octets
Essayez-le en ligne! ou vérifier tous les cas de test .
Comment ça fonctionne
la source
R,
5347 octetsCette réponse a utilisé la fonction assez soignée
ifelse
:ifelse(Condition, WhatToDoIfTrue, WhatToDoIfNot)
la source
return()
dans votre code. Mais vous devez également nommer la fonction pour que votre récursivité fonctionneMathematica, 36 octets
Voici les premiers termes:
la source
Dyalog APL, 25 octets
⊃{1↓⍵,⍎⍕' +÷',¨⍵}⍣⎕⊢0 1 1
la source