La sequenza Stern-Brocot è una sequenza simile a Fibonnaci che può essere costruita come segue:
- Inizializza la sequenza con
s(1) = s(2) = 1 - Imposta contatore
n = 1 - Aggiungi
s(n) + s(n+1)alla sequenza - Aggiungi
s(n+1)alla sequenza - Incremento
n, tornare al passaggio 3
Ciò equivale a:
Tra le altre proprietà, la sequenza Stern-Brocot può essere utilizzata per generare ogni possibile numero razionale positivo. Ogni numero razionale verrà generato esattamente una volta e apparirà sempre nei suoi termini più semplici; per esempio, 1/3è il 4 ° numero razionale nella sequenza, ma i numeri equivalenti 2/6, 3/9ecc. non appariranno affatto.
Possiamo definire l'ennesimo numero razionale come r(n) = s(n) / s(n+1), dove si s(n)trova l'ennesimo numero Stern-Brocot, come descritto sopra.
La tua sfida è scrivere un programma o una funzione che genererà l'ennesimo numero razionale generato usando la sequenza Stern-Brocot.
- Gli algoritmi sopra descritti sono 1 indicizzati; se la voce è indicizzata 0, indicare nella risposta
- Gli algoritmi descritti sono solo a scopo illustrativo, l'output può essere derivato nel modo che preferisci (oltre alla codifica hardware)
- L'input può essere tramite STDIN, parametri di funzione o qualsiasi altro meccanismo di input ragionevole
- Ouptut può essere su STDOUT, console, valore di ritorno della funzione o qualsiasi altro flusso di output ragionevole
- L'output deve essere una stringa nel modulo
a/b, doveaebsono le voci pertinenti nella sequenza Stern-Brocot. La valutazione della frazione prima dell'output non è consentita. Ad esempio, per l'input12, l'output dovrebbe essere2/5, non0.4. - Le scappatoie standard non sono ammesse
Questo è code-golf , quindi vincerà la risposta più breve in byte.
Casi test
I casi di test qui sono 1 indicizzati.
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
Voce
OEIS: A002487
Eccellente video di Numberphile che discute la sequenza: Frazioni Infinite
True/2non è una frazione valida (per quanto mi riguarda). A parte questo, Truenon è sempre 1- alcune lingue usano -1invece per evitare potenziali errori quando si applicano operatori bit per bit. [citazione necessaria]
Trueè equivalente 1e True/2sarebbe 1/2.

Trues invece di1s?