0

私は、ヒープのアルゴリズムの再帰バージョンの実装に取り​​組んできました。擬似コードへのリンクは次のとおりです: http://en.wikipedia.org/wiki/Heap%27s_algorithm

再帰部分に到達するまで、すべてが順調に進んでいます。まだ交換要素を入れていないことはわかっていますが、そこまでは進んでいません。セグメンテーション違反があったことを示す gcc デバッガーを使用するまで、実行はエラーを表示せずに失敗します。これが私のコードです:

#include <string>
#include <iostream>
using namespace std;

string* permute(int n, string array[2]){
    if (n==1){
        return array;
    }
    else{
        for(int c=1; c<=n;c++){
            permute(n--,array);
        }
    }
}

int main() {
    string array[2]={"a","b"};
    permute(2,array);
    return 0;
}
4

4 に答える 4

5

実装全体が間違っているように見えるという事実はさておき、発生している実行時例外の直接的な理由は、 への再帰呼び出しpermute(2,array)であり、最終的にスタック オーバーフローにつながります。n--これは、代わりに--n(より正確には) を使用して呼び出しているために発生しますn-1

于 2014-07-07T14:38:37.330 に答える
2

permute( --n, array ) デクリメントではなく 2 のコピーを渡してみてください

于 2014-07-07T14:39:16.187 に答える
0

再帰呼び出しで事後デクリメントを行うべきではなくn、代わりに事前デクリメントを行うべきです:

permute(--n,array);
于 2014-07-07T14:39:27.933 に答える