考虑下面给出的 C 函数foo和bar :
int foo(int val)
{
int x = 0;
while (val > 0)
{
x = x + foo(val--);
}
return val;
}
int bar(int val)
{
int x = 0;
while (val > 0)
{
x = x + bar(val-1);
}
return val;
}
foo(3) 和 bar(3) 的调用将导致:
(A)分别返回 6 和 6
(B)分别为无限循环和异常终止
(C)分别异常终止和无限循环
(D)两者都异常终止答案: (C)
说明:在函数foo 中,while 中的 foo 每次都以值 3 调用,因为 val 是通过后递减运算符传递的,因此值 3 被传递,而 val 稍后递减。每次调用该函数都会创建一个新变量,因为传递的变量是按值传递的,值为 3。因此该函数将突然关闭而不返回任何值。在函数栏中,在while循环值中val变量的值没有递减,只保持3。 while循环中的bar函数用val-1即2调用,但是val的值没有递减,所以会导致死循环。
这个问题的测验