1

これが、与えられたセットのすべてのサブセットを見つけるための私のプログラムです。それを解決するために、私は再帰を使用しました。しかし、私がそれをコードブロック上のウィンドウでコンパイルしたとき。それは与えます

このアプリケーションは、ランタイムに異常な方法でそれを終了するように要求しました。

gccコンパイラでは、応答も応答も表示されませんでした。

#include <iostream>
#include <vector>
#include <string>

using namespace std;

vector<string> findAllSubset(char c, vector<string> v) {
    int size = v.size();
    if(size == 1) {
        v.push_back("");
        return v;
    }
    c = v[size-1][0];
    v.pop_back();
    v = findAllSubset(c, v);

    for(int i = 0; i < v.size(); i++) {
        string s= "";
        if(v[i].size() == 0){
            s += c;
            v.push_back(s);
        }
        else {
            s += v[i] + c;
            v.push_back( s );
        }
    }
    return v;
}

main() {
    vector<string> v, ans;
    char c = 65;
    v.push_back("a");
    v.push_back("b");
    //v.push_back("c");
    //v.push_back("d");
    ans = findAllSubset(c, v);
    return 0;
}
4

3 に答える 3

5

for ループは無限ループです。ベクトル内で要素が push_back されるたびに、ベクトルのサイズが大きくなり、条件 i < v.size() が常に true になります。

于 2012-06-12T10:13:46.520 に答える
2

ループしている間、文字列をベクトルにプッシュし続けます。無限ループがあります。通常、ループ中にコンテナーを変更することはお勧めできません。

于 2012-06-12T10:01:26.233 に答える
1

無限ループになりそうです。プログラムは正常にコンパイルおよび実行されますが、終了しません

于 2012-06-12T09:55:55.170 に答える