使用迭代函数输出任意长的行

时间:2011-12-11 09:45:15

标签: c recursion

在“关于c的书”4E中,p。 225,在讨论递归时,作者写道:

  

下一个例子说明了一个操纵字符的递归函数。它可以很容易地重写为等效的迭代函数。我们将此作为练习。

该函数读取一行,使输出反转。这是代码:

void wrt_it(void)
{
    int c;

    if ((c = getchar()) != '\n')
        wrt_it();
    putchar(c);
}

据我所知,这里的重点是我们对行长度没有限制(除了内存之外)。由于c是一个自动变量,因此每次调用wrt_it时都会生成新的实例。现在,如何轻松地将其重写为迭代;也就是说,不使用动态内存分配,指针或可变长度数组?

1 个答案:

答案 0 :(得分:2)

我不相信它可以在没有动态内存分配的情况下迭代编写,除非你想限制字符串的最大长度。

此外,递归版本具有在内存不足之前将达到的限制:堆栈的大小。一个很长的字符串会导致堆栈溢出。