假设我有一棵要使用“深度优先搜索”遍历的树,并且遍历它的算法如下所示:
algorithm search(NODE): doSomethingWith(NODE) for each node CHILD connected to NODE: search(CHILD)
现在,在许多语言中,递归的最大深度是最大的,例如,如果递归的深度超过某个限制,则该过程将因堆栈溢出而崩溃。
如何在没有递归的情况下而是通过堆栈来实现此功能?在许多情况下,有 很多局部变量 。它们可以存储在哪里?
您将其更改为使用如下所示的堆栈:
algorithm search(NODE): createStack() addNodeToStack(NODE) while(stackHasElements) NODE = popNodeFromStack() doSomethingWith(NODE) for each node CHILD connected to NODE: addNodeToStack(CHILD)
至于第二个问题:
在许多情况下,有很多局部变量;它们可以存储在哪里?
这些实际上可以保留在与原始位置相同的位置。如果变量是“ doSomethingWith”方法的局部变量,只需将其移至该变量中,然后将其重构为单独的方法即可。该方法不需要处理遍历,只需要处理即可,并且可以使自己的局部变量以这种方式仅在其范围内起作用。