知识有限,用C++写了2个月
在此函数string code
中递归递减字符,直到""
找到基本情况。我想在找到基本案例之前修剪一些路径,并且对于某些string code
基本案例的路径将找不到。对于修剪,我想将路径中的属性与参数进行比较int time
。这将搜索由“nodeT”组成的 trie
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
}
此函数在添加时间检查修剪之前运行良好,它现在循环,如果超出时间但随后从 char 位置 0returns false
的候选重新开始。string code
问题:1)是否嵌套return false
将递归踢回下一个调用 for 循环,2)是否应该将时间修剪放在具有逻辑return false
或return
“路径”的 for 循环中,3)这从根本上来说是一团糟,我需要学习 C++ 概念<-如果是,请解释。
此外,发布的功能是实际功能的简化版本 - 有一个时间修饰符和一个我遗漏的“跳过”路径。在过去的问题中,我发现这些“插件”会分散问题的注意力。