Когда вы повторяете это, Range
возвращает список каждый раз:
Range(3,7)
# translates to
[3, Range(4,7)]
# which translates to
[3, [4, Range(5,7)]]
# etc.
Чтобы избежать этого, сложите свои списки вместе:
def Range (lo, hi):
if lo >= hi:
return []
else:
return [lo] + Range(lo+1, hi)
EDIT:
Как указывает @delnan, эта функция очень неэффективна - она рекурсивно используется в языке без оптимизации хвостового вызова * и генерирует два ( возможно три ) новых списков для каждого уровня рекурсии. Ответ @ mipadi более производительный, поскольку он создает только один список (аргумент acc
или accumulator
) и передает его по мере повторения.
* Это может не быть правдой для языка Python, но я на 99% уверен, что это верно для наиболее распространенной реализации Python, а именно CPython.