我正在阅读 RobertSedwick 的算法书中的列表遍历。函数定义如下所示。提到可以有 traverse 和 remove 函数可以有迭代的对应部分,但 traverseR 不能有。我的问题为什么 traverseR 不能有迭代对应部分?是不是如果递归调用不是函数的结尾,即像遍历那样我们不能进行迭代,我的理解对吗?
感谢您的时间和帮助。
void traverse(link h, void visit(link))
{
if (h == 0) return;
visit(h);
traverse(h->next, visit);
}
void traverseR(link h, void visit(link))
{
if (h == 0) return;
traverseR(h->next, visit);
visit(h);
}
void remove(link& x, Item v)
{
while (x != 0 && x->item == v)
{ link t = x; x = x->next; delete t; }
if (x != 0) remove(x->next, v);
}