私の知識は限られており、C++ で 2 か月間書いています
この関数では、基本ケースが見つかるstring code
まで再帰的に文字を減らします。""
ベース ケースが見つかる前にいくつかstring code
のパスを削除したいのですが、ベース ケースへのパスが見つからないパスもあります。プルーンの場合、パス内の属性をパラメーターと比較したいと思いますint time
。これは、「nodeT」で作成されたトライを検索します
struct charT {
char letter;
nodeT *next;
};
struct nodeT {
bool isOperation;
bool isCode;
int time;
Vector<charT> alpha;
};
nodeT *root
usage:
string code = "12345";
int time = convertToEpoch(20120815); //my epoch function
containsCode(code, time)
bool containsCode(string code, int time)
{
if(root == NULL) return false;
else return containsCodeHelper(root, code, time);
}
bool containsCodeHelper(nodeT *w, string code, int time)
{
if(code == "") //base case: all char found
return w->isCode;
else {
if (w->isOperation && w->time != time) return false; //case 2: time check OK <- at a midpoint in the path
for(int i = 0; i < w->alpha.size(); i++) { //Loop through the leaf
if (w->alpha[i].letter == code[0]) //case 3: leaf exists
return containsCodeHelper(w->alpha[i].next, code.substr(1), time);
}
}
return false; //if no path
}
この関数は、時間チェック prune を追加する前はうまく機能していました。時間外の場合はループしますが、 char 位置 0 からreturns false
の候補で再び開始します。string code
質問: 1) 再帰を次の for ループの呼び出しに戻す入れ子になったキックですか? 2) 論理または「パス」return false
を使用して for ループに時間プルーニングを配置する必要がありますか? C++ の概念を学ぶ <- はいの場合は説明してください。return false
return
また、投稿された関数は、実際の関数の簡略化されたバージョンです。時間への修飾子と、省略した「ステップ オーバー」パスがあります。過去の質問で、これらの「アドオン」が質問から気をそらすことがわかりました。