【发布时间】:2011-08-29 12:55:33
【问题描述】:
我正在阅读如下尾递归
尾递归是指在最后一行进行递归调用。尾巴 递归可以通过将主体封闭在一个 while 循环并 用一个赋值替换递归调用 函数参数。
例如
void print(Iterator start, Iterator end, ostream& out=cout) {
if(start == end)
return;
out << *start++ << endl;
print(start, end, out);
}
通过上述规范转换为迭代为
void print(Iterator start, Iterator end, ostream& out=cout) {
while(true) {
if(start == end)
return;
out << *start++ << endl;
}
}
在上面的段落中提到“用每个函数参数一个赋值替换递归调用,但在给定的示例中我们没有任何赋值?
谁能解释并举例说明如何将递归转换为迭代函数?
【问题讨论】:
-
我认为他们说得不准确,他们真正的意思是你可以在每个循环中执行一次操作,而不是每个函数调用一次。在这种情况下,输出语句 (
out <<)