La séquence Stern-Brocot est une séquence de type Fibonnaci qui peut être construite comme suit:
- Initialisez la séquence avec
s(1) = s(2) = 1
- Régler le compteur
n = 1
- Ajouter
s(n) + s(n+1)
à la séquence - Ajouter
s(n+1)
à la séquence - Incrémenter
n
, revenir à l'étape 3
Cela équivaut à:
Entre autres propriétés, la séquence de Stern-Brocot peut être utilisée pour générer chaque nombre rationnel positif possible. Chaque nombre rationnel sera généré une seule fois, et il apparaîtra toujours dans ses termes les plus simples; par exemple, 1/3
est le 4e nombre rationnel de la séquence, mais les nombres équivalents 2/6
, 3/9
etc. n'apparaîtront pas du tout.
Nous pouvons définir le nième nombre rationnel comme r(n) = s(n) / s(n+1)
, où s(n)
est le nième nombre de Stern-Brocot, comme décrit ci-dessus.
Votre défi consiste à écrire un programme ou une fonction qui produira le nième nombre rationnel généré à l'aide de la séquence Stern-Brocot.
- Les algorithmes décrits ci-dessus sont indexés 1; si votre entrée est indexée 0, veuillez l'indiquer dans votre réponse
- Les algorithmes décrits sont à titre illustratif uniquement, la sortie peut être dérivée de la manière que vous souhaitez (autre que le codage en dur)
- L'entrée peut être via STDIN, les paramètres de fonction ou tout autre mécanisme d'entrée raisonnable
- Ouptut peut être vers STDOUT, console, valeur de retour de fonction ou tout autre flux de sortie raisonnable
- La sortie doit être sous forme de chaîne dans le formulaire
a/b
, oùa
etb
sont les entrées pertinentes dans la séquence Stern-Brocot. L'évaluation de la fraction avant la sortie n'est pas autorisée. Par exemple, pour l'entrée12
, la sortie doit être2/5
non0.4
. - Les failles standard sont interdites
C'est le code-golf , donc la réponse la plus courte en octets gagnera.
Cas de test
Les cas de test ici sont indexés 1.
n r(n)
-- ------
1 1/1
2 1/2
3 2/1
4 1/3
5 3/2
6 2/3
7 3/1
8 1/4
9 4/3
10 3/5
11 5/2
12 2/5
13 5/3
14 3/4
15 4/1
16 1/5
17 5/4
18 4/7
19 7/3
20 3/8
50 7/12
100 7/19
1000 11/39
Entrée OEIS: A002487
Excellente vidéo Numberphile discutant de la séquence: Infinite Fractions
True/2
n'est pas une fraction valide (en ce qui me concerne). En passant, ce True
n'est pas toujours le cas 1
- certains langages utilisent à la -1
place pour éviter les erreurs potentielles lors de l'application d'opérateurs au niveau du bit. [citation nécessaire]
True
est équivalent 1
et le True/2
serait 1/2
.
True
s au lieu de1
s?