Послідовність Штерна-Брокота - це послідовність фібоннаці, яка може бути побудована наступним чином:
- Ініціалізуйте послідовність з
s(1) = s(2) = 1
- Встановити лічильник
n = 1
- Додайте
s(n) + s(n+1)
до послідовності - Додайте
s(n+1)
до послідовності - Зростання
n
, поверніться до кроку 3
Це еквівалентно:
Серед інших властивостей послідовність Штерна-Брокота може бути використана для отримання кожного можливого додатного раціонального числа. Кожне раціональне число генерується рівно один раз, і воно завжди з’явиться у найпростіших його словах; наприклад, 1/3
є четвертим раціональне число в послідовності, але еквівалентні числа 2/6
, і 3/9
так далі не будуть з'являтися на всіх.
Ми можемо визначити n-е раціональне число як r(n) = s(n) / s(n+1)
, де s(n)
- n-е число Штерна-Брокота, як описано вище.
Ваше завдання полягає в тому, щоб написати програму або функцію, яка виведе n-е раціональне число, сформоване за допомогою послідовності Штерна-Брокота.
- Алгоритми, описані вище, є 1-індексованими; якщо ваш запис 0-індексований, будь ласка, вкажіть свою відповідь
- Описані алгоритми призначені лише для ілюстративних цілей, вихід може бути отриманий будь-яким способом (за винятком жорсткого кодування)
- Вхід може здійснюватися через STDIN, параметри функції або будь-який інший розумний механізм введення
- Ouptut може бути 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
Відмінне числофільм, що обговорює послідовність: Нескінченні дроби
True/2
не є дійсною фракцією (що стосується мене). З іншого боку, True
це не завжди 1
- деякі мови використовують -1
замість цього, щоб уникнути можливих помилок при застосуванні побітових операторів. [цитування потрібно]
True
еквівалентно 1
і True/2
було б 1/2
.
True
s замість1
s?