考虑以下用C编程语言编写的函数。
输入“ ABCD EFGH”上的上述函数的输出为
void foo (char *a)
{
if (*a && *a != ` `)
{
foo(a+1);
putchar(*a);
}
}
(A) ABCD EFGH
(B) ABCD
(C) HGFE DCBA
(D) DCBA答案: (D)
说明:程序以相反的顺序打印”或’\ 0’之前的所有字符(以先到者为准)。
假设给定数组的基地址为1000。可以如下图所示表示
下面是给定代码的完整递归堆栈
调用foo(1004)后,由于1004处的字符为”,因此递归将返回。 foo(1004)将返回其调用者foo(1003),并且将执行foo(1003)中的下一行,该行将在1003(’D’)处打印字符。然后foo(1003)将返回foo(1002),并且将打印1002(’C’)处的字符,并且该过程将继续到foo(1000)。
该解决方案由Pranjul Ahuja贡献。
这个问题的测验