刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

单选题

执行以下程序,输出的结果是(  )。

int func( int x, int y, int z )
{
    if( x == 1 || y == 1 || z == 1 ) return 1;
    if( x < y && x < z )
        return func( x, y - 1, z ) + func( x, y, z - 1 ); 
    if( y < x && y < z )
        return func( x - 1, y, z ) + func( x, y, z - 1 );
    return func( x - 1, y, z ) + func( x, y - 1, z );
}
int main()
{
    cout << func( 3, 3, 2 );
    return 0;
}

A

5

B

6

C

7

D

8

使用微信搜索喵呜刷题,轻松应对考试!

答案:

C

解析:

【喵呜刷题小喵解析】:

首先,我们分析函数`func`的逻辑。

1. 如果`x`、`y`或`z`中的任何一个等于1,函数返回1。
2. 如果`x`小于`y`和`z`,则递归调用`func(x, y-1, z)`和`func(x, y, z-1)`,并将它们的结果相加。
3. 如果`y`小于`x`和`z`,则递归调用`func(x-1, y, z)`和`func(x, y, z-1)`,并将它们的结果相加。
4. 其他情况,递归调用`func(x-1, y, z)`和`func(x, y-1, z)`,并将它们的结果相加。

对于`main`函数中的调用`func(3, 3, 2)`,我们观察到:

* `x`并不等于1,也不小于`y`和`z`,因此第一个和第二个条件都不满足。
* `y`也不等于1,并且`y`并不小于`x`,因此第三个条件也不满足。

因此,我们进入第四个条件,即`y`小于`z`。在这个条件下,函数会递归调用`func(3, 2, 2)`和`func(3, 3, 1)`。

对于`func(3, 2, 2)`,`x`并不等于1,也不小于`y`和`z`,因此进入第四个条件。这会导致递归调用`func(2, 2, 2)`和`func(3, 1, 2)`。

对于`func(3, 1, 2)`,`x`等于1,因此直接返回1。

对于`func(2, 2, 2)`,`x`并不等于1,也不小于`y`和`z`,因此进入第四个条件。这会导致递归调用`func(1, 2, 2)`和`func(2, 1, 2)`。

对于`func(1, 2, 2)`和`func(2, 1, 2)`,`x`都等于1,因此都直接返回1。

最终,`func(3, 3, 2)`的结果是`func(3, 2, 2)`(即2)加上`func(3, 1, 2)`(即1),也就是3。

因此,`main`函数中的`cout`会输出3,与选项C对应。
创作类型:
原创

本文链接:执行以下程序,输出的结果是(  )。 int func( int x, int y, int z )

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share