📜  门| GATE-CS-2017(套装1)|第 39 题

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

考虑下面给出的 C 函数foobar

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的值没有递减,所以会导致死循环。
这个问题的测验