from types import GeneratorType def iterative(f, stack=[]): def wrapped_func(*args, **kwargs): if stack: return f(*args, **kwargs) to = f(*args, **kwargs) while True: if type(to) is GeneratorType: stack.append(to) to = next(to) continue stack.pop() if not stack: break to = stack[-1].send(to) return to return wrapped_func
Selle kasutamiseks tuleb oma rekursiivne funktsioon kirjutada nii nagu ikka, aga funktsiooni algusesse annotatsioon @iterative
, ning rekursiivsete kutsete jaoks tuleb kasutada yield
. Näiteks
@iterative def dfs (u): if visited[u]: yield for nxt in graph[u]: yield dfs(u) # teen ehk veel mingeid asju jne yield
Lehekülg viimati muudetud July 06, 2024, at 02:33 PM