Кажется очевидным, что рекурсия реализуется с использованием стеков. Но как вообще была реализована общая рекурсия с использованием стека? Например, если у нас есть пользовательская функция, которая рекурсивна, можем ли мы переписать код, используя только стек и итерацию?вместо произвольной рекурсии, используя стек?
Вот один пример (я давал неправильный пример в другом посте):
def recursiveCall(node):
if node==None:
return (0,True)
(left,lstatus) = recursiveCall(node.left)
(right,rstatus) = recursiveCall(node.right)
if lstatus==True and rstatus==True:
if abs(left-right)<=1:
return (max(left,right)+1,True)
else:
return (0,False)
else:
return (0,False)
или проще один:
def recursiveInorder(node):
if node==None:
return
recursiveInorder(node.left)
print(node.val)
recursiveInorder(node.right)
, как вы понимаете, это рекурсию с помощью стеки? Обратите внимание, что я не прошу об итерационном решении вышеупомянутых двух примеров. Я считаю, что должно быть. Но я полагаю, что эти итерационные решения не пытаются воспроизвести механизм рекурсии с использованием стека. Я хотел бы видеть, если это возможно, эти рекурсии могут быть полностью заменены специальным закодированным стековым механизмом (в основном создающим механизм неявной рекурсии, встроенный в компилятор или что-то явно).
Я думаю, нужно найти способ отслеживания и восстановления статуса программы, локальных переменных и т. Д.? thx.
класс узла определяется как:
class node:
def __init__(self,x):
self.val=x
self.left=None
self.right=None
Это может быть интересно: [Может ли каждая рекурсия быть преобразована в итерацию?] (Http://stackoverflow.com/questions/931762/can-every-recursion-be-converted-into-iteration) – Christian
Christian Thx .. Но я не могу прочитать большую часть языка, используемого в сообщении. и, вероятно, мне нужно увидеть реальный пример. – bozeng
Thx .. Позвольте мне исправить это – bozeng