Последовательность Штерна-Броко представляет собой последовательность, подобную Фибоначчи, которая может быть построена следующим образом:
- Инициализируйте последовательность с помощью
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
.
True
s вместо1
s?