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

📅  最后修改于: 2021-06-29 03:23:49             🧑  作者: Mango

考虑以下用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。可以如下图所示表示

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贡献。
这个问题的测验