Последовательность Штерна-Броко представляет собой последовательность, подобную Фибоначчи, которая может быть построена следующим образом:
- Инициализируйте последовательность с помощью
s(1) = s(2) = 1 - Установить счетчик
n = 1 - Добавить
s(n) + s(n+1)к последовательности - Добавить
s(n+1)к последовательности - Инкремент
n, вернитесь к шагу 3
Это эквивалентно:
Среди других свойств последовательность Штерна-Броко может быть использована для генерации любого возможного положительного рационального числа. Каждое рациональное число будет сгенерировано ровно один раз, и оно всегда будет отображаться в самых простых терминах; например, 1/3это 4-е рациональное число в последовательности, но эквивалентные числа 2/6и 3/9т. д. вообще не появятся.
Мы можем определить n-е рациональное число как r(n) = s(n) / s(n+1), где s(n)n-е число Штерна-Броко, как описано выше.
Ваша задача - написать программу или функцию, которая выведет n-е рациональное число, сгенерированное с использованием последовательности Штерна-Броко.
- Описанные выше алгоритмы 1-индексированы; если ваша запись 0 проиндексирована, пожалуйста, укажите в своем ответе
- Описанные алгоритмы предназначены только для иллюстративных целей, вывод может быть получен любым способом (кроме жесткого кодирования)
- Ввод может быть через STDIN, параметры функции или любой другой разумный механизм ввода
- Выход может быть STDOUT, консоль, возвращаемое значение функции или любой другой разумный выходной поток
- Выходные данные должны быть представлены в виде строки в форме
a/b, гдеaиb- соответствующие записи в последовательности Штерна-Броко. Оценка доли до выхода не допускается. Например, для ввода12, вывод должен быть2/5, а не0.4. - Стандартные лазейки запрещены
Это код-гольф , поэтому самый короткий ответ в байтах победит.
Контрольные примеры
Тестовые случаи здесь 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
Запись OEIS: A002487
Превосходное видео Numberphile, обсуждающее последовательность: бесконечные дроби
True/2недопустимая дробь (насколько я понимаю). Кроме того, Trueне всегда 1- некоторые языки используют -1вместо этого, чтобы избежать потенциальных ошибок при применении побитовых операторов. [нужная цитата]
Trueэквивалентен 1и True/2будет 1/2.

Trues вместо1s?