仅访问节点一次的算法

时间:2014-07-17 08:14:21

标签: algorithm recursion

假设我有一个N元素数组。我以某种方式调用递归函数:(这里没有特定的语言,只是伪代码)

recursive(myArray){
    // do something awesome and provide base case etc
    // also get mySecondArray based on myArray
    for(i=0;i<mySecondArray.length;i++){
        recursive(mySecondArray[i];
    }
} 

正如您所看到的,我需要根据某些条件和myArray上调用的其他函数在内部创建的另一个数组的每个元素上调用此函数。

我遇到的问题是mySecondArray总是有某些已经在myArray中的元素。我不想再对那些元素调用递归。

问:解决此问题的最佳算法是什么?

如果您需要更多信息,请告诉我(因为它变得更复杂,我没有详细介绍)

谢谢

1 个答案:

答案 0 :(得分:0)

您可以使用 hashmap / set / dictionary / whatever-you-call-it 来查找元素。

Python解决方案:

def recursive(myArray, mySet = None):
    if mySet is None:
        mySet = { myArray }
    else:
        mySet.add(myArray)

    for mySecondArray in myArray:
        if mySecondArray not in mySet:
            recursive(myArray, mySet)

顺便说一下,写这样的递归函数是个坏主意。如果可能,您应该使用单个函数和一堆参数。

P.S。:你的代码不完整,但想法是一样的。