Напишіть програму або названу функцію, яка виведе або поверне послідовність до n
першого числа в послідовності Iccanobif, задокументована на OEIS як A014258 . Зауважте, що лише нульовий елемент у послідовності ( 0
) буде надрукований, якщо n
дорівнює нулю.
Послідовність створюється, починаючи подібно до стандартної послідовності Фібоначчі, але після додавання двох попередніх чисел ви перегортаєте результат і скидаєте будь-які провідні нулі. Цікавий мені принаймні факт, що ця послідовність не суворо зростає (див. Список нижче). Він також здається (і, мабуть, є) суворо більшим або рівним послідовності Фібоначчі.
Вхід вашої програми має бути цілим числом.
Перші 20 номерів послідовності надані тут для вашого задоволення від перегляду:
0, 1, 1, 2, 3, 5, 8, 31, 93, 421, 415, 638, 3501, 9314, 51821, 53116, 739401, 715297, 8964541, 8389769
Стандартні лазівки заборонені.
Найкоротша програма виграє.
EDIT: Додано примітку, щоб уточнити, що послідовність починається з нульового елемента і повинна бути включена, якщо n
дорівнює нулю.
Приклад можливостей IO:
0 -> 0
1 -> 0 1
6 -> 0 1 1 2 3 5 8
17 -> [0, 1, 1, 2, 3, 5, 8, 31, 93, 421, 415, 638, 3501, 9314, 51821, 53116, 739401, 715297]
Тепер, коли є кілька відповідей, нижче - мої реалізації в Python 2, над якими я працював, щоб приховати розмітку:
Ітеративний:
# Закрити мою початкову програму. 73 байти. Слід також зазначити, що ця програма не може досягти переповнення стека. Він працює протягом n = 5000 менш ніж за 10 секунд.i,a,b=input(),0,1 print a while i:print b;i,a,b=i-1,b,int(str(a+b)[::-1])
Рекурсивна:
# Зауважте, що це друкує зворотніn
рядки. 64 байти. Буде потрапляє помилка переповнення стека для великих значень n.def f(n,i=0,j=1):print i,n and f(n-1,j,int(str(i+j)[::-1]))or'';