Python имеет максимальную глубину рекурсии, но не имеет максимальной глубины итерации. Почему рекурсия ограничена? Не было бы более естественным рассматривать рекурсию как итерацию, а не ограничивать количество рекурсивных вызовов?Почему Python имеет максимальную глубину рекурсии?
Позвольте мне сказать, что источник этой проблемы исходил от попытки реализовать поток (см. this question для более подробной информации о потоках). Например, предположим, что мы хотим, чтобы написать поток для производства натуральных чисел:
def stream_accum(s, n): # force the stream to a list of length n
def loop(s, acc):
if len(acc) == n:
return acc
hd, tl = s()
return loop(tl, acc + [hd])
return loop(s, [])
def nats():
def loop(n):
return n, lambda: loop(n+1)
return loop(1)
Рекурсивный определение потоков является весьма привлекательным. Однако, я думаю, лучший/более питонический подход будет заключаться в использовании генераторов.
«Привлекательное» рекурсивное решение имеет ряд непривлекательных аспектов. Во-первых, это поведение O (n ** 2), потому что вы постоянно создаете новые списки для их расширения. Во-вторых, это слишком сложно, учитывая, что вы можете просто перебирать натуральные числа. Это пример написания Python, как будто это Scheme или Haskell. Различные языки хороши в разных вещах. Используйте итерацию. –