Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
result = self.func(*args, **kwargs)
return sum_natural_x.call(y - 1, result + y)
while callable(result): result = result()
Более того сам Гвидо является противником этого.И не напрасно — рекурсии зло (особенно в скрипт языках).
def recursive_proc (a, b, c):
stack = []
while 1:
## делаем работу с текущими a, b,c :
...
if next_level:
## push - след. уровень, текущие аргументы в стек :
stack += [[b, c]]
## новые b и c
b, c = ...
continue;
else:
## pop - возврат в пред. уровень :
b, c = stack.pop()
## окончание рекурсии :
if not len(stack):
break
# пример из статьи:
>>>> timeit.timeit("sum_natural(1000000)", "from __main__ import sum_natural", number = 50) / 50
0.19649668910566448
# мой пример:
>>>> timeit.timeit("sum_natural_stk(1000000)", "from __main__ import sum_natural", number = 50) / 50
0.13872319519680334
ваш телепатор сломалсяОк
ну-ну. ссылки на тот сор, я предполагаю, не появится. Если спор был похожий, то там шла речь именно о хвостовой рекурсии, а не о том, какой Питон плохой или хорошийДа, речь там шла о хвостовой рекурсии, но вас так эта тема задевает (неумение питоном TRE), что я сделал выводы о нелюбви к питону ) возможно, вывод неверный.
То есть вы не понимаете, что такое хвостовая рекурсия. Точки возврата в хвостовой рекрусии нетДа нет, в процедурной реализации рекурсии всегда есть точка возврата… Просто это вы не поняли: именно это критиковал van Rossum.
То есть вы предпочитаете выполнять тупую механическую работу, с которой прекрасно справится компилятор.Ну где вы видите работу в двух трех строчках. Просто я предпочитаю держать рекурсию под своим контролем.
Не секрет, что Python не оптимизирует хвостовую рекурсию. Более того сам Гвидо является противником этого.
Нет. van Rossum говорил примерно следующее: в питоне не будет оптимизации хвостовой рекурсии потому что я не хочу и не понимаю, что это такое.Короче мы с Гвидо не понимаем что токое хвостовая рекурсия… :)
Нет в этом никакой сути. Наличие в языке оптимизации хвостовой рекурсии как-то отнимает у вас право писать собственный код со стеком? Нет.Вот в тикле 8.6 ввели tailcall, (кстати, я как один из разрабов tcl был против) — так вот после потянулась череда правок в ядре, воркараундов и исключений, чтобы это хозяйство коректно работало с очень гибким функционалом тикля. Теперь это все крутится в namespace scope, а не в scope текущей процедуры.
Python — оптимизация хвостовой рекурсии