0

関数の実行が非常に遅いため、反復に変更する必要がある関数があります。
2つの再帰呼び出しがあり、どちらの条件が真であるかによって異なります。

これは次のようなものです:(
私は関数の外にクラスの静的配列を持っています、たとえばデータ)

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つのパスのみを(配列に)返します。!!

そして、それを管理する良い方法はスタックを使用することだと私は知っています...しかし、私はその方法がわかりません。誰かが私にそれについてのヒントを教えてもらえますか?

4

1 に答える 1

0

関数が同じことを何度も計算している可能性があります。これは、技術用語ではoverlapping sub-problems(に精通しているdynamic programming場合は知っているかもしれません)と呼ばれます。まず、それが当てはまるかどうかを確認してください。あなたは関数が何をするかについて何も言わなかったので、私は正確な問題を言うことができません。

また、stack再帰は内部でスタックを使用するため、aの使用について話していることはあまり役に立ちません。内部の代わりに外部スタックを使用すると、エラーが発生しやすくなりますが、あまり役に立ちません。

于 2012-06-08T07:48:17.197 に答える