gpt4 book ai didi

c++ - 尾调用递归

转载 作者:太空狗 更新时间:2023-10-29 19:46:47 25 4
gpt4 key购买 nike

我正在实现如下功能:

void Add(list* node)
{
if(this->next == NULL)
this->next = node;
else
this->next->Add(node);
}

似乎 Add 将在递归的每一步中被尾调用。
我也可以将其实现为:

void Add(list *node)
{
list *curr = this;
while(curr->next != NULL) curr = curr->next;
curr->next = node;
}

这根本不会使用递归。
这个哪个版本比较好? (以堆栈大小或速度)
请不要给出“为什么不使用 STL/Boost/任何东西?”评论/答案。

最佳答案

它们在性能方面可能是相同的,因为编译器可能会将它们优化为完全相同的代码。

但是,如果您在调试设置下进行编译,编译器将不会针对尾递归进行优化,因此如果列表足够长,您可能会出现堆栈溢出。还有一个(非常小的)可能性,一个糟糕的编译器不会优化尾递归的递归版本。在迭代版本中没有这种风险。

考虑到未优化的可能性,选择更清晰、更容易维护的一个。

关于c++ - 尾调用递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7289811/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com