Я наивно пытался создать рекурсивный генератор. Не работал. Это - то, что я сделал:
def recursive_generator(lis):
yield lis[0]
recursive_generator(lis[1:])
for k in recursive_generator([6,3,9,1]):
print(k)
Все, что я получил, было первым объектом 6
.
Существует ли способ заставить такой код работать? По существу передача yield
управлять к уровню выше в схеме рекурсии?
Да у Вас могут быть рекурсивные генераторы. Однако они страдают от того же предела глубины рекурсии как другие рекурсивные функции.
def recurse(x):
yield x
yield from recurse(x)
for (i, x) in enumerate(recurse(5)):
print(i, x)
Этот цикл добирается приблизительно до 3 000 (для меня) перед катастрофическим отказом.
Однако с некоторым обманом, можно создать функцию, которая подает генератор к себе. Это позволяет Вам писать генераторы как, они являются рекурсивными, но не: https://gist.github.com/3noch/7969f416d403ba3a54a788b113c204ce