我正在使用Trie开发pset4拼写器。我想使用递归来查找加载的字典的大小。但是没有任何效果。根据调试器的操作,我认为它可能无法恢复到sizer先前指向的位置。例如,在:
的字典中const regex = /\"\$date\"\s*:\s*"(\d{4}-\d{2}-\d{2}[A-Z]\d+:\d+:\d+\.\d+[A-Z])"/gm;
const str = `"\$date" : "2019-07-10T17:34:01.222Z"`;
const subst = `$1`;
const result = str.replace(regex, subst);
console.log(result);
大小能够读取前三个。但是当我将计数器恢复为以前的大小时,它在a之后不读字母b。我认为它仍在检查读取aab的数组。我该怎么办???
a
aa
aab
ab
答案 0 :(得分:1)
我认为它仍在检查读取aab的数组。我该怎么办???
我认为你是对的。
请考虑如何在此代码中更新全局变量sizer
的值。您这样做的唯一方法是:
sizer = sizer -> children[i];
由于您只将sizer
设置为指向当前节点的子节点之一,而从未将其还原为先前的值,因此该程序从根到叶正好遵循一条路径,然后将其耗尽它的能力。使用不同的输入,您可以亲自证明这是正在发生的事情。例如,
a
b
ba
将报告计数为1,因为它首先穿过节点“ a”,并且是叶子。
全局变量很容易使您陷入麻烦,尤其是可修改的变量。现在就开始养成避免使用它们的习惯。宁愿通过参数将信息传递给函数。
在大多数情况下,也希望避免递归,甚至在您有更多经验之前(甚至会告诉您“我不想要任何东西”),甚至不要考虑将递归与可修改的全局变量结合使用。 / p>
目前尚不清楚sizer
的类型是什么,但假设它是struct sizer *
。在这种情况下,请考虑将功能签名更改为
unsigned int size(const struct sizer *node_sizer);
这不只是一种风格。正确完成后,它也可以解决您的功能问题。