在“关于c的书”4E中,p。 225,在讨论递归时,作者写道:
下一个例子说明了一个操纵字符的递归函数。它可以很容易地重写为等效的迭代函数。我们将此作为练习。
该函数读取一行,使输出反转。这是代码:
void wrt_it(void)
{
int c;
if ((c = getchar()) != '\n')
wrt_it();
putchar(c);
}
据我所知,这里的重点是我们对行长度没有限制(除了内存之外)。由于c
是一个自动变量,因此每次调用wrt_it
时都会生成新的实例。现在,如何轻松地将其重写为迭代;也就是说,不使用动态内存分配,指针或可变长度数组?
答案 0 :(得分:2)
我不相信它可以在没有动态内存分配的情况下迭代编写,除非你想限制字符串的最大长度。
此外,递归版本具有在内存不足之前将达到的限制:堆栈的大小。一个很长的字符串会导致堆栈溢出。