0

f(p,p)如果 p 的值在调用前被初始化为 5,返回值是多少?请注意,第一个参数是通过引用传递的,而第二个参数是通过值传递的。

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

根据我的说法,它是 3024,因为我们从 f(5,5) f(6,4)*6 f(7,3)*7 f(8,2)*8 f(9,1)*9 then开始1,而且我对按引用部分调用有点困惑return f ( x, c ) * x ,每次调用后 x 的值会改变还是保持不变?

4

1 回答 1

4

假设这真的是 C++ 而不是 C(所以引用声明是有意义的),结果是未指定的(但不是未定义的行为)。

问题是在表达式中,程序是否会在调用之前或之后f(x,c) * x评估第二个是未指定的。xf(x,c)

请注意,由于未指定此行为,因此您根本不能依赖它 - 更改编译器选项可能会更改评估顺序。事实上,在技术上允许编译器使用一个顺序来评估表达式,对某些调用使用另一种顺序,f()而对其他调用使用另一种顺序f()(尽管我认为这在实践中不会发生)。

于 2013-02-14T01:24:23.107 回答