Returning from a multiple stacked call at once
ast
ast at invalid
Sat Dec 12 11:46:33 EST 2020
Le 12/12/2020 à 09:18, Cameron Simpson a écrit :
> On 12Dec2020 07:39, ast <ast at invalid> wrote:
>> In case a function recursively calls itself many times,
>> is there a way to return a data immediately without
>> unstacking all functions ?
>
> Not really. Do you have an example where this is inconvenient?
>
> There are alternatives, for example passing in a Queue and put()ing the
> data onto the queue. It's quite dependent on what you're trying to do
> though.
>
> Cheers,
> Cameron Simpson <cs at cskk.id.au>
>
I don't really need it. I was just wondering and guessed it was
not feasible.
Here is a code where it would be useful. This code looks for a
path in a graph.
If the found path is long, say 100 nodes, then path_finder calls
itself recursively 100 times, and has to unstack 100 times to
provide the found path. It could be returned immediately.
def path_finder(graph, start, end, path=[]):
if start in path:
return None
if start == end:
return path + [start] # Found !
if start not in graph:
return None
path = path + [start]
for node in graph[start]:
found_path = path_finder(graph, node, end, path)
if found_path:
return found_path
return None
graph = {'A': ['B', 'C'],
'B': ['C', 'D'],
'C': ['D'],
'D': ['C'],
'E': ['F'],
'F': ['C']}
path_finder(graph, 'A', 'D')
More information about the Python-list
mailing list