参考答案和解析
5
更多“已知函数Fact的程序如下,在执行Fact(5)的过程中,Fact函数被调用的次数为_____。 Long Int Fact(int n) { Long Int x; If (n > 1) { x = Fact(n-1); return n*x; } else return 1; }”相关问题
  • 第1题:

    如有下程序:includeusing namespace std;long fun(int n){if(n>2)return(fun(n-1)+fu

    如有下程序: #include<iostream> using namespace std; long fun(int n) { if(n>2) return(fun(n-1)+fun(n-2)); else return 2; } int main() { cout<<fun(3)<<endl; return 0; } 则该程序的输出结果应该是( )。

    A.2

    B.3

    C.

    D.5


    正确答案:C
    解析: 主函数中调用fun(3),在fun内部当n>2时,递归调用fun(n-1)+fun(n-2),否则返回2。所以当n=3时,调用fun(2)+fun(1),即返回2+2,等于4,

  • 第2题:

    ( 21 )计算斐波那契数列第 n 项的函数定义如下:

    Int fib(int n){

    if (n == 0) return 1;

    else if (n == 1) return 2;

    else return fib(n-1)+fib(n-2);

    }

    若执行函数调用表达式 fib(2) ,函数 fib 被调用的次数是

    A ) 1

    B ) 2

    C ) 3

    D ) 4


    正确答案:C

  • 第3题:

    ( 8 )有如下的函数定义:

    int Xfun(int *a, int n){

    int x=*a;

    for(int *pa=a+1; pa<a+n; pa++)

    if(*pa>x) x=*pa;

    return x;

    }

    若执行了语句

    int x[5]={23,46,78,55,16};

    后,通过表达式 Xfun(x,5) 调用该函数,则得到的返回值为 【 8 】 。


    正确答案:

  • 第4题:

    阅读以下说明和C语言程序,将应填入(n)处的字句写在对应栏内。

    【说明】

    Fibonacci数列A={1,1,2,2,5,8,…)有如下性质:

    a0=a1=1

    ai=ai-1+ai-2,i>1

    对于给定的n,另外有一个由n个元素组成的数列xn,该数列中各元素的值为:

    xi=ai/ai+1,i=0,1,…,n

    现要求对xn中的元素按升序进行排序,然后以分数形式输出排序后的xn。例如n=5时,排序前的xn={1/1,1/2,2/3,3/5,5/8},排序后的xn={1/2,3/5,5/8,2/3,1/1}。程序中函数make()首先生成排序前的xn,然后调用函数sort()进行排序,最后输出所求结果。

    【程序】

    include <stdio.h>

    include <stdlib.h>

    include <malloc.h>

    struct fact

    {

    long m,n;

    };

    void sort(int n,struct fact *p)

    {

    int a;

    long s,t,u,v;

    struct fact *q,*end;

    for(end=p+(n-1),a=1;a;end--)

    for(a=0,q=p;q<end;p++)

    {

    s=q->m;

    t=q->n;

    u=(q+1)->m;

    v=(q+1)->n;

    if( (1) )

    {

    q->m=u;

    (2)

    (3)

    (q+1)->n=t;

    a=1;

    }

    }

    }

    void make(int n)

    {

    int i;

    long a,b,c;

    struct fact *x,*y;

    x=(struct fact *)malloc(sizeof(struct fact)*n);

    x->m=1:

    x->n=1;

    for(a=1,b=1,i=2;i<=n;i++)

    {

    (4)

    a=b;

    b=c;

    (x+(i-1))->m=a;

    (x+(i-1))->n=b;

    }

    (5)

    printf("x%d={%1d/%1d",n,x->m,x->n);

    for(y=x+1;y<x+n;y++)

    printf(",%1d/%1d",y->m,y->n);

    printf("}\n");

    free(x);

    }

    void main()

    {

    int n;

    printf("input n:");

    scanf("%d",&n);

    make(n);

    }


    正确答案:(1)s*v>=t*u (2)q->n=v; (3)(q+1)->m=s; (4)c=a+b; (5)sort(nx);
    (1)s*v>=t*u (2)q->n=v; (3)(q+1)->m=s; (4)c=a+b; (5)sort(n,x); 解析:本题考查在C语言中实现对数列的排序。
    题目要求我们对xn中的元素按升序进行排序,然后以分数形式输出排序后的xn,程序中函数make()用来生成排序前的xn,而使用函数sort()进行排序。在生成排序前的xn以前,我们应该仔细理解题目中给出的生成规则。
    首先,我们来看函数sort(),此函数的功能是排序。在函数体中我们可以看到它是用双重循环来实现对数列元素排序的,从整个函数我们可以分析出它排序的方法是从数列中找出一个最大的数存放到数列的最后面,在下次循环时,再从剩下的部分找出其最大的数存放到剩下部分的最后面,这样直到整个数列排好序。
    第(1)空是一个条件判断语句的条件,在第二重循环下面,根据上面的分析,该循环的作用是在数列中找出最大的数,那么,这个条件判断语句应该是判断相临两个数的大小,再结合程序中的内容,此空的答案应该是s*v>=t*u。
    第(2)空和第(3)空是条件判断语句结果为真的情况下执行的语句,如果条件为真,则说明前面的数要大于后面的数。而根据上面的分析,要将较大:的数放到后面位置,以方便下次和再后面的数比较,因此,这两个空的作用是要实现对两个数位置的交换,答案应该分别为q->n=v和(q+1)->m=s。
    接着,我们来看函数make(),它的功能是用来生成排序前的xn,在生成数列时,我们应该注意Fibonacci数列的性质,它的每一项等于前两项的和。在函数体中,我们可以发现第一个循环体就是用来生成排序前的zn的。第(4)空就在循环体内,我们仔细看代码,就可以发现变量c没有初值,但后面又把变量c的值赋给了变量b,因此,第(4)空应该是给变量c赋初值,但应该给它一个什么样的初值呢?结合Fibonacci数列的性质 ai=ai-1+ai-2,我们很容易知道变量c存放的就是ai的值。因此,此空答案为c=a+b。
    第(5)空是在循环体下面,上面我们已经说到,循环体生成了排序前的xn,根据题目的要求,应该要调用函数sort()进行排序了,因此,此空答案为sort(n,x)。

  • 第5题:

    有以下程序:include int fun(int n){if(n == 1) return 1;else return( n + fun( n -

    有以下程序:#include <stdio.h>int fun(int n){ if(n == 1) return 1; else return( n + fun( n - 1 ) );}main( ){ int x; seanf("% d" ,&X) ;x = fun(x) ;pfinff( "% d \n" ,x);} 执行程序时,给变量x输入10,程序的输出结果是( )。

    A.55

    B.54

    C.65

    D.45


    正确答案:A
    解析:函数调用将实参x=10传给形参n,语句n=1不成立,执行else语句,递归调用fun函数。fun函数共被调用8次,即fun(9),fun(8),…,fun(2),由此可得n=10+9+…+1=55,所以x=55。

  • 第6题:

    设有一个递归算法如下int fact(intn){//n 大于等于0 if(n<=0)return 1; else return n* fact(n--); }则计算fact(n)需要调用该函数的次数为(30)次。

    A.n

    B.n+1

    C.n+2

    D.n-1


    正确答案:B
    解析:n--为先使用后自减所以调用n-1次时的值为0终止调用

  • 第7题:

    设有一个递归算法如下 im fact(int n){ if(n<=0)return 1; else return n * fact(n-1); } 下面正确的叙述是(35)。

    A.计算fact(n)需要执行n次函数调用

    B.计算fact(n)需要执行n+1次函数调用

    C.计算fact(n)需要执行n+2次函数调用

    D.计算fact(n)需要执行n-1次函数调用


    正确答案:B
    解析:连同其他函数调用fact和递归调用次数,计算fact(n)需要执行n+1次函数调用。

  • 第8题:

    有下列程序: int fun(int n) {if(n= =1))return l; else return(n+fun(n-1)): } main( ) { int x; seanf("%d",&x);x=fun(x);printf("%d\n",x); } 执行程序时,给变量x输入l0,程序的输出结果是( )。

    A.55

    B.54

    C.65

    D.45


    正确答案:A
    本题在函数intfun(intn)的定义中又出现了对函数fun的调用,所以函数fun是递归函数。因而在主函数中调用x=fun(x)时,当输入10赋给变量X时,递归调用的过程为fun(10)=l0+fun(9)=10+9+fun(8)=10+9+8+fun(7)=10+9++8+7+fun(6)=10+9++8+7+6+fun(6)=10+9++8+7+6+5+fun(4)=10+9++8+7+6+5+4+fun(3)=10+9++8+7+6+5+4+3+fun(2)=10+9++8+7+6+5+4+3+2+fun(1)=10+9++8+7+6+5+4+3+2=55

  • 第9题:

    设有一个递归算法如下: int fact(int n){ if(n<=0)return 1; else return n*fact(n-1); } 下面正确的叙述是(35)。

    A.计算fact(n)需要执行n次函数调用

    B.计算fact(n)需要执行n+1次函数调用

    C.计算fact(n)需要执行n+2次函数调用

    D.计算fact(n)需要执行n-1次函数调用


    正确答案:B
    解析:主程序调用fact(n)称为外部调用,其他调用为内部调用,直到调用fact(0)为止,fact(n)调用fact(n-1),fact(n-1)调用fact(n-2),…,fact(1)调用fact(0),内部调用n次,外部调用1次,总共n+1次。

  • 第10题:

    下列函数中,哪项是正确的递归函数( )。

    A int Fun(int n)

    {

    if(n<1) return 1;

    else return n*Fun(n+1);

    }

    B) int Fun(ira n)

    {

    if(abs(n)<1) return 1;

    else return n*Fun(n/2);

    }

    C) int Fun(int n)

    {

    if(n>1) return 1;

    else return n*Fun(n*2)1

    }

    D) int Fun(int n)

    {

    if(n>1) return 1;

    else retun n*Fun(n-1);

    }

    A.A

    B.B

    C.C

    D.D


    正确答案:B
    解析:本题考查递归函数这个知识点。递归函数由递归出口和递归体两部分组成:递归出口给出了递归终止的条件;递归体给出了递归的方式。对于选项A,当参数n>=1时,不满足递归调用的结束条件;对于选项C,当参数n=0时,不满足递归调用的结束条件;对于选项D,当参数n:2时,不满足递归调用的结束条件。

  • 第11题:

    设n的初值为正整数,设计一个递归算法如下:int fact(int n){if(n<=0)return 1;else return(n*fact(n-1));}以下叙述中,正确的是______。

    A.计算fact(n)需要执行n+2次函数调用
    B.计算fact(n)需要执行n+1次函数调用
    C.计算fact(n)需要执行n次函数调用
    D.计算fact(n)需要执行n-1次函数调用

    答案:B
    解析:
    本题考查函数递归调用方面的相关知识。递归法是描述算法的一种强有力的方法,其思想是:将N=n时不能得出解的问题,设法递归(压栈)转化为求n-1,n-2,…的问题,一直到N=0或1的初始情况,由于初始情况的解可以给出,因此,开始层层退栈得到N=2,3,…,n时的解,得到最终结果。本题中,主程序调用fact(n)称为外部调用,其他调用称为内部调用,直到调用fact(0)为止。fact(n)调用fact(n-1),fact(n-1)调用fact(n-2)……fact(1)调用fact(0),内部调用n次,外部调用一次,共n+1次。

  • 第12题:

    单选题
    有以下程序#include int fun(int n){ if(n==1)  return 1; else  return(n+fun(n-1));}main(){ int x; scanf(%d,&x); x=fun(x); printf(%d,x);}执行程序时,给变量x输入10,程序的输出结果是(  )。
    A

    55

    B

    54

    C

    65

    D

    45


    正确答案: C
    解析:
    fun函数是一个递归函数,用于求整数1到n的和。因此,主函数中最后输出1到10之间的整数和,即55。答案选择A选项。

  • 第13题:

    有如下程序:includeusing namespace std;long fun(int n){if(n>2)return(fun(n-1)+fu

    有如下程序: #include<iostream> using namespace std; long fun(int n) { if(n>2) return(fun(n-1)+fun (n-2)); else return 2; } int main() { cout<<fun(3)<<end1; return 0; } 则该程序的输出结果应该是 ( )。

    A.2

    B.3

    C.4

    D.5


    正确答案:C
    解析:主函数中调用fun(3),在fun内部当n>2时,递归调用 fun(n-1)+fun(n-2),否则返回2。所以当n=3时,调用fun(2)+fun(1),即返回2+2,等于4。

  • 第14题:

    有以下程序: int fun(int n) {if(n==1)return 1; else return(n+fun(n-1)); } main() {int x; scanf("%if",&x);x=fun(x);printf("%d\n",x); } 执行程序时,给变量X输入10,程序的输出结果是( )。

    A.55

    B.54

    C.65

    D.45


    正确答案:A
    解析:函数fun()通过递归调用实现的功能为n+(n-1)+…+1,故程序的输出结果为55。

  • 第15题:

    下列程序的输出结果是______。

    long fun5(int n)

    ( long s;

    if((n==l)‖(n==2))

    s=2;

    else

    s=n+fun5(n-1);

    return(s);

    }

    main()

    { long x;

    x=fun5(4);

    printf(%1d\n",x);


    正确答案:9
    9 解析:考查if else语句,n==4不满足条件,所以fun5(4)=4+fun5(3),n==3也不满足条件,fun5(3)=3+fun5(2),n==2满足条件fun5(2)=2,故x=4+3+2=9。

  • 第16题:

    下面是用来计算n的阶乘的递归函数,请将该函数的定义补充完整。(注:阶乘的定义是n!cn*(n-1)*...*2*1)

    unsigned fact(unsigned n)

    {

    if (n<=1)

    return 1;

    return 【 】;

    }


    正确答案:n*fact(n-1)或者fact(n-1)*n或者n*fact(-1+n)或者fact(-1+n)*n
    n*fact(n-1)或者fact(n-1)*n或者n*fact(-1+n)或者fact(-1+n)*n 解析:递归的使用。

  • 第17题:

    有如下程序:includelong fib(int n){if(n>2)return(fib(n-1)+fib(n-2)); else return(

    有如下程序: #include <stdio.h> long fib(int n) { if(n>2)return(fib(n-1)+fib(n-2)); else return(2); } main() { printf("%d\n",fib(3));} 该程序的输出结果是( )。

    A.2

    B.4

    C.6

    D.8


    正确答案:B
    解析:本题考查函数的递归调用。fib(3)=fib(2)+fib(1),而fib(2)的返回值为2,fib(1)的返回值也为2,故输出的fib(3)的值为4。

  • 第18题:

    有以下程序int fun(int n) { if(n==1) return 1; else return(n+fun(n-1));}main(){ int x; scanf("%d",&x); x=fun(x); printf("%d\n",x);}执行程序时,给变量x输入10,程序的输出结果是A.55 B.54 C.65 D.45


    正确答案:A
    本题主要考查函数的递归调用。在做递归调用函数类型的题目时,我们首先要找到函数的出口和递归结束的条件。
    在本题中,程序首先定义了一个fun函数,函数的形参是一个整型变量n,从后面的程序可以看出,该函数是一个递归函数。在函数体中,首先执行条件判断语句,如果条件结果为真,说明变量n为1,此时返回1,这是递归函数的出口;否则返回函数的递归调用。
    在主函数中,定义一个变量x,并试图通过键盘输入的方式为变量x赋初值,然后调用fun函数,并用x作为其形参,用x保存最后的运行结果输出。
    变量x的初值为10,从上面的分析我们知道,递归调用的出口是n=1,而每递归一次n的值减1,因此,函数fun递归调用了9次,其运算相当于10+9+8+7+6+5+4+3+2+1=55。因此,程序最终的输出结果是55。

  • 第19题:

    设有如下函数定义

    int fun(int k)

    {if(k<1) return 0:

    else if(k==1) return 1:

    else return fun(k一1)+1:

    }

    若执行调用语句:n=fun(3);,则函数fun总共被调用的次数是

    A.2

    B.3

    C.4

    D.5


    正确答案:B
    解析:函数fun总共被调用了3次,即fun(3)、fun(2)和fun(13)

  • 第20题:

    能保证对所有的参数能够结束的递归函数是

    A.int f(int n){if(n<1)return 1;else return n*f(n+1);}

    B.int f(int n){if(n>1)return 1;else return n*f(n-1);}

    C.int f(int n){if(abs(n)<1)return 1;else return n*f(n/2);}

    D.int f(int n){if(n>1)return 1;else return n*f(n*2);)


    正确答案:C
    解析:递归函数的两个重要条件是要有结束和递归表达式。选项A、B、D无法结束。根据这两个条件可以进行判断出答案为C。

  • 第21题:

    下面 ______ 是正确的递归函数,它保证对所有的参数能够结束。

    A.int f(int n){ if(n<1) return 1; else return n*f(n+1); }

    B.int f(int n){ if(n>1) return 1; else return n*f(n-1); }

    C.int f(int n){ if(abs(n)<1) return 1; else return n*f(n/2); }

    D.int f(int n){ if(n>1) return 1; else return n*f(n*2); }


    正确答案:C

  • 第22题:

    设n的初始值为正整数,设计一个递归算去如下: int fact (int n) { if (n<=0) return l; else return (n*fact (n-l)) ; 以下叙述中正确的是(49) 。

    A.计算fact(n)需要执行n次函数调用

    B.计算fact(n)需要执行n+l次函数调用

    C.计算fact(n)需要执行n+2次函数调用

    D.计算fact(n)需要执行n-l次函娄[调用


    正确答案:B
    本题考查函数递归调用方面的相关知识。递归法是描述算法的一种强有力的方法,其思想是:将N=n时不能直接求解的问题,设法递归(压栈)转化为求n-l,n-2,…的问题一直到N=O或1的初始情况,由于初始情况的解可以给出或方便得到,因此,开始层层退栈得到N=2,3,…,n时的解,直到得到最终结果。本题中,主程序调用fact(n)称为外部调用,其他调用称为内部调用,直到调用fact(0)为止。fact(n)调用fact(n-l),fact(n-l)调用fac(n-2),…,fact(l)调用fact(0),内部调用n次,外部调用一次,共n+l次。

  • 第23题:

    设有一个递归算法如下: int fact(int n) {  //n大于等于0               if(n<=0) return 1;               else return n*fact(n-1);        }  则计算fact(n)需要调用该函数的次数为()

    • A、 n+1
    • B、 n-1
    • C、 n
    • D、 n+2

    正确答案:A

  • 第24题:

    单选题
    设有一个递归算法如下: int fact(int n) {  //n大于等于0               if(n<=0) return 1;               else return n*fact(n-1);        }  则计算fact(n)需要调用该函数的次数为()
    A

     n+1

    B

     n-1

    C

     n

    D

     n+2


    正确答案: A
    解析: 特殊值法。设n=0,易知仅调用一次fact(n)函数,故选A。