La secuencia Stern-Brocot es una secuencia similar a Fibonnaci que se puede construir de la siguiente manera:
- Inicialice la secuencia con
s(1) = s(2) = 1
- Establecer contador
n = 1
- Añadir
s(n) + s(n+1)
a la secuencia - Añadir
s(n+1)
a la secuencia - Incremento
n
, regrese al paso 3
Esto es equivalente a:
Entre otras propiedades, la secuencia Stern-Brocot se puede utilizar para generar todos los números racionales positivos posibles. Cada número racional se generará exactamente una vez, y siempre aparecerá en sus términos más simples; por ejemplo, 1/3
es el cuarto número racional en la secuencia, pero los números equivalentes 2/6
, 3/9
etc., no aparecerán en absoluto.
Podemos definir el enésimo número racional como r(n) = s(n) / s(n+1)
, donde s(n)
está el enésimo número de Stern-Brocot, como se describió anteriormente.
Su desafío es escribir un programa o función que genere el enésimo número racional generado utilizando la secuencia Stern-Brocot.
- Los algoritmos descritos anteriormente están indexados en 1; si su entrada está indexada en 0, indique su respuesta
- Los algoritmos descritos son solo para fines ilustrativos, la salida se puede derivar de la forma que desee (excepto la codificación rígida)
- La entrada puede ser a través de STDIN, parámetros de función o cualquier otro mecanismo de entrada razonable
- Ouptut puede ser STDOUT, consola, valor de retorno de función o cualquier otro flujo de salida razonable
- La salida debe ser como una cadena en el formulario
a/b
, dondea
yb
son las entradas relevantes en la secuencia Stern-Brocot. Evaluar la fracción antes de la salida no está permitido. Por ejemplo, para entrada12
, la salida debe ser2/5
, no0.4
. - Las lagunas estándar no están permitidas
Este es el código de golf , por lo que la respuesta más corta en bytes ganará.
Casos de prueba
Los casos de prueba aquí son 1 indexados.
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
Entrada de OEIS: A002487
Excelente video de Numberphile que discute la secuencia: fracciones infinitas
True/2
no es una fracción válida (en lo que a mí respecta). Por otro lado, True
no siempre es así 1
, algunos lenguajes se utilizan -1
para evitar posibles errores al aplicar operadores bit a bit. [cita requerida]
True
es equivalente 1
y True/2
lo sería 1/2
.
True
s en lugar de1
s?