📜  门| GATE-CS-2015(套装2)|问题 25

📅  最后修改于: 2021-09-25 04:17:23             🧑  作者: Mango

考虑以下用 C 编程语言编写的函数。

上述函数在输入“ABCD EFGH”上的输出是

void foo (char *a)
{
  if (*a && *a != ` `)
  {
     foo(a+1);
     putchar(*a);
  }
}

(A) ABCD EFGH
(B) ABCD
(C) HGFE DCBA
(四) DCBA答案: (D)
说明:程序以相反的顺序打印 ‘ ‘ 或 ‘\0’(以先到者为准)之前的所有字符。

让我们假设给定数组的基地址是 1000。它可以表示如下图所示

pranjul_25

下面是给定代码的完整递归堆栈

pranjul_25_2

调用 foo(1004) 后,递归将返回为 1004 处的字符为 ‘ ‘。 foo(1004) 将返回到它的调用者 foo(1003) 并且 foo(1003) 中的下一行将被执行,它将在 1003 (‘D’) 打印字符。然后 foo(1003) 将返回到 foo(1002) 并且 1002 (‘C’) 处的字符将被打印并且该过程将继续直到 foo(1000)。

此解决方案由Pranjul Ahuja贡献。
这个问题的测验