有如下程序:    #include <iostream>    using namespace std;    class Sample    {      friend long fun(Sample s);    public:      Sampl

admin2017-10-17  22

问题 有如下程序:    #include <iostream>    using namespace std;    class Sample    {      friend long fun(Sample s);    public:      Sample(long a) {x=a;}    private:      long x;    };    long fun(Sample s)    {      if(s.x < 2) return 1;      return s.x * fun(Sample(s.x-1));    }    int main()    {      int stun = 0;      for (int i=0; i<6; i++) {sum += fun(Sample(i));}      cout << sum;      return 0;    }运行时输出的结果是

选项 A、120
B、16
C、154
D、34

答案C

解析 本题考查的知识点是:友元函数、递归函数。友元函数不是当前类的成员函数,而是独立于当前类的外部函数,但它可以访问该类的所有对象的成员,包括私有成员、保护成员和公有成员。本题中的fun函数就被声明为Sample类的友元函数了。因此,在fun函数中可以直接访问Sample类对象的私有成员x。主函数中通过一个for循环依次以临时构造的Sample类对象为参数,调用fun函数,构造参数依次为0~5。如果一个函数在其函数体内直接或间接地调用了自己,该函数就称为递归函数。本题中的fun()函数直接调用了自身,所以它又是递归函数,不难分析其递归性质如下:

因为Sample类的构造函数只是简单的将构造参数a赋给成员x,故可省略不看。通过上述递归定义不难看出,n取0~5时,fun(n)的值依次为:1,1,2,6,24,120。累加之后结果为154,故本题应该选择C。
转载请注明原文地址:https://jikaoti.com/ti/SBt0FFFM
0

最新回复(0)