0

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

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

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
函数在图中搜索从一个点到另一个点的每条路径,但只返回(到数组)一个只有唯一顶点的路径。!!

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

4

1 回答 1

0

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

此外,您所说的使用 astack并没有太大用处,因为递归在内部使用堆栈。使用外部堆栈而不是内部堆栈更容易出错,但没有多大用处。

于 2012-06-08T07:48:17.197 回答