【发布时间】:2019-03-02 22:06:43
【问题描述】:
我们正在学校学习递归。
根据我在线阅读的内容,您可以通过将递归步骤作为函数执行的最后一件事来优化递归函数。
但是需要 return 关键字吗?即使是 void 函数?
void insert(Node<T>*& n, T value)
{
if (n == nullptr)
{
n = new Node<T>(value);
return;
}
else if (value < n->get_value())
{
Node<T>* left = n->get_left();
return insert(left, value);
}
else
{
Node<T>* right = n->get_right();
return insert(right, value);
}
}
如果没有 return 关键字,这仍然是尾递归吗?
特别是在else if 中,因为没有它,它将“不再是函数所做的最后一件事”。
【问题讨论】:
-
如果你想让
n = new Node<T>(value);做一些有用的事情,似乎n需要引用一个指针。 -
基于@PeterBecker 的观察,我想我应该问:您输入的代码是否可以编译?如果 if 子句的主体周围没有括号,我认为它不会。
-
感谢您的编辑。
-
@AnneGunn 没关系,谢谢你的帮助