0

f(p,p)呼び出しの前に p の値が 5 に初期化された場合の戻り値は? 最初のパラメーターは参照によって渡されるのに対し、2 番目のパラメーターは値によって渡されることに注意してください。

int f (int & x, int c )
{
    c = c − 1;
    if ( c == 0 ) return 1;
    x = x + 1;
    return f ( x, c ) * x;
}

(A) 3024
(B) 6561
(C) 55440
(D) 161051

f(5,5) f(6,4)*6 f(7,3)*7 f(8,2)*8 f(9,1)*9 私によると、 thenで始まるため、その 3024 1であり、参照部分による呼び出しについて少し混乱してreturn f ( x, c ) * x います x の値は、呼び出しのたびに変化しますか、それとも一定のままですか?

4

1 に答える 1

4

これが実際には C ではなく C++ であると仮定すると (したがって、参照宣言はある程度意味があります)、結果は未定義です (未定義の動作ではありません)。

問題は、式f(x,c) * xでは、プログラムがxを呼び出す前または後に秒を評価するかどうかが指定されていないことf(x,c)です。

この動作は指定されていないため、まったく依存できないことに注意してください。コンパイラ オプションを変更すると、評価の順序が変わる可能性があります。実際、コンパイラーが の一部の呼び出しで 1 つの順序を使用して式を評価しf()、他の呼び出しで別の順序を使用して式を評価することは、技術的に許可されていますf()(ただし、これは実際には発生しないと思います)。

于 2013-02-14T01:24:23.107 に答える