从递归变为迭代

时间:2012-06-08 06:58:33

标签: algorithm optimization recursion iteration

我的函数需要更改为迭代,因为执行速度很慢 有两个递归调用,取决于哪个条件为真。

这是这样的:
(我有函数外的静态数组,比方说数据)

void func(int a, int b, int c, int d) {
    //something
    //non-recursive
    //here..

    for (i=0; i<data.length; i++) {
        if (!data[i].x) {
            data[i].x = 1;
            if (a == data[i].value1)
                func(data[i].value2,b,c,d);
            else if (a == data[i].value2)
                func(data[i].value1,b,c,d);

            data[i].x = 0;
        }
    }
}

!!
编辑:这是我的算法:http://pastebin.com/F7UfzfHv
函数在图中搜索从一个点到另一个点的每个路径,但仅返回(到数组)一个路径,其中只有唯一的顶点。 !!

而且我知道管理它的好方法是使用堆栈...但我不知道如何。有人可以给我一个暗示吗?

1 个答案:

答案 0 :(得分:0)

很有可能你的功能可能会一次又一次地计算相同的东西,在技术术语中称为overlapping sub-problems(如果你熟悉dynamic programming那么你可能知道) 。首先尝试确定是否是这种情况。既然你没有告诉任何关于什么功能的事情,我也说不出确切的问题。

由于递归在内部使用堆栈,因此使用stack时所讨论的内容并没有多大用处。使用外部堆栈而不是内部堆栈更容易出错并不是很有用。