已知有一个求阶乘的递归函数如下: def fac(n): if n==0 or n==1: return 1 else: 填空 其中,应填入的是()。A.return n*fac(n-1)B.n*fac(n-1)C.return (n-1)*fac(n)D.(n-1)*fac(n)

题目

已知有一个求阶乘的递归函数如下: def fac(n): if n==0 or n==1: return 1 else: 填空 其中,应填入的是()。

A.return n*fac(n-1)

B.n*fac(n-1)

C.return (n-1)*fac(n)

D.(n-1)*fac(n)


相似考题
参考答案和解析
facl(n-1) * n ; n * facl(n-1); n*facl(n-1) ; facl(n-1)*n
更多“已知有一个求阶乘的递归函数如下: def fac(n): if n==0 or n==1: return 1 else: 填空 其中,应填入的是()。”相关问题
  • 第1题:

    已知递归函数f的定义如下:

    int f(int n){

    if(n<= 1)return 1;//递归结束情况f5=5*f3=5*3*f1

    else return n*f(n-2); //递归

    }

    则函数调用语句f(5)的返回值是______。


    正确答案:15
    15 解析:函数递归调用,f(5)=5*f(3)=5*(3*f(1))=15。

  • 第2题:

    已知递归函数fun的定义如下: int fun(int n) { if(n<=1)return 1;//递归结束情况 else return n*fun(n-2);//递归 } 则函数调用语句fun(5)的返回值是( )。

    A.5

    B.12

    C.15

    D.30


    正确答案:C
    解析:递归函数fun被定义为含有参数int n返回整型.其中 fun函数递归调用本身,当n=1时,fun返回1,如果大于1那么执行n*fun(n-2)。所以,当n等于5时,执行5*fun(3);当n等于3时继续调用fun,3*fun(1),即fun(5)=5*(3*fun(1)),答案为15。

  • 第3题:

    请补充函数fun(),函数fun()的功能是求7的阶乘。

    注意:部分源程序给出如下。

    请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的横线上填入所编写的若干表达式或语句。

    试题程序:

    include<stdio.h>

    long fun(int n)

    {

    if(【 】)

    return(n*fun(【 】);

    else if(【 】)

    return 1;

    }

    main()

    {

    int k=7;

    printf("%d!=%ld\n", k, fun(k));

    }


    正确答案:n>1 n-1 n==1
    n>1 n-1 n==1 解析:第一空:求阶乘时采用递归的算法,n>1和n==1这两种情况的处理方法不同,需要分开考虑。第二空:阶乘的算法是,当n>1时,n!=n*(n-1)!,即fun(n)=n*fun(n-1)。第三空:n==1是递归的终止条件,因为1!=1,所以当n=1时,返回1。

  • 第4题:

    有如下递归函数:

    int Fun(int n){

    if(n<=1) return 1;

    ______

    }

    请补充完整,使得函数Fun能够正确计算形参n的阶乘。


    正确答案:else return n*Fun(n-1);
    else return n*Fun(n-1); 解析:此题考查的是递归函数。函数Fun中的参数n小于2时,Fun函数返回1,其余返回值为n*Fun(n-1)。

  • 第5题:

    设有一个递归算法如下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终止调用

  • 第6题:

    设有一个递归算法如下 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次函数调用。

  • 第7题:

    下面的函数是完成1~n的累加,请填空。a(int k){ if(k <=0) printf("error\n"); if(k == 1) return 1; else;}


    正确答案:return(a(k-1)+k)
    在本题中,函数a的功能是完成1~n的累加。在本题的程序中,a函数带有一个形参k。然后执行第一条条件判断语句,结果为真,说明k的值小于1,不是题目所要求的,输出错误提示。否则,程序执行第二条条件判断语句,结果为真,则返回1,否则返回需要填空的部分。从题目要求我们可以知道,函数a的功能是求1~k的累加,而从程序中我们可以看出,填空的部分返回的是k的值大于1的情况,这时,我们可以通过递归调用的方式来求解,这样不仅可以将问题细化,即k的值逐步减少,而且还可以实现1~k的累加。因此,本空需要填写的内容是return(a(k-1)+k)。

  • 第8题:

    已知递归函数f(n)的功能是计算1+2+…+n,且n≥1,应采用的代码段是______。

    A.if n>1 then return 1 else return n+f(n-1)

    B.if n>1 then return 1 else return n+f(n+1)

    C.if n<1 then return 0 else return n+f(n-1)

    D.if n<1 then return 0 else return n+f(n+1)


    正确答案:C
    解析:递归函数的目的是执行一系列调用,一直到达某一点,序列终止。为了保证递归函数正常执行,应该遵守下面的规则:
      (1)每当一个递归函数被调用时,程序首先应该检查其基本的条件是否满足,例如,某个参数的值等于零,如果是这种情形,函数应停止递归。
      (2)每当函数被递归调用时,传递给函数一个或多个参数,应该以某种方式变得“更简单”。即这些参数应该逐渐靠近上述基本条件。例如,一个正整数在每次递归调用时会逐渐变小,以至最终其值能到达零。
      在本题中,f(n)的功能是解决1+2+…+n的累加问题,可用下面的递归公式表示f(n):
                   f(n)=0      (n=0)
                   f(n)=n+f(n-1)  (n1)
      因此可知,f(n)应采用的代码段为:
      if n1
      then return 0
      else return n+f(n-1)。

  • 第9题:

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

    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

  • 第10题:

    递归函数f(n)的功能是计算1+2+…+n,且n≥1,则f(n)的代码段是(49)。

    A.if n>1 then return 1 else return n+f(n-1)

    B.if n>1 then return 1 else return n+f(n+1)

    C.if n>1 then return 0 else return n+f(n+1)

    D.if n<1 then return 0 else return n+f(n-1)


    正确答案:D
    解析:根据题意,当n1时结束递归,函数返回0,否则返回n+f(n-1)进行递归运算。

  • 第11题:

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

    unsigned fact (unsigned n)

    {

    if(n<=1)

    retum 1;

    return【 】;

    }


    正确答案:n*fact (n-1)
    n*fact (n-1) 解析:本题考核递归函数。一般递归函数由递归出口和递归体两部分组成。递归出口给出了递归终止的条件;递归体给出了递归的方式。题中程序给出了递归出口,但是没有给出递归体,由阶乘的定义可知其递归体应该为n*fact (n-1)。

  • 第12题:

    设有一个递归算法如下: 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

  • 第13题:

    ( 9 )下面的函数利用递归实现了求 1+2+3+ …… +n 的功能:

    int sum ( int n ) {

    if ( n==0 )

    return 0;

    else

    return n+sum ( n-1 ) ;

    }

    在执行 sum ( 10 )的过程中,递归调用 sum 函数的次数是【 9 】 。


    正确答案:

  • 第14题:

    ( 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

  • 第15题:

    下面是用来计算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 解析:递归的使用。

  • 第16题:

    下面是一个递归Java程序,其功能为 ( )long Factorial(int n){ if(1==n){ return 1; } else return n*Factorial(n-1);}

    A.求1-n的和

    B.求2到n的和

    C.求n的阶乘

    D.求2-n的积


    正确答案:C
    解析:该题考查的是递归调用。在Java中允许方法的递归调用,即允许方法调用自身。当算阶乘的时候最多的是用到递归调用,本题的功能是求n的阶乘。

  • 第17题:

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

    【函数2.1说明】

    递归函数sum(int a[], int n)的返回值是数组a[]的前n个元素之和。

    【函数2.1】

    int sum (int a[],int n)

    {

    if(n>0) return (1);

    else (2);

    }

    【函数2.2说明】

    有3个整数,设计函数compare(int a,int b,int c)求其中最大的数。

    【函数2.2】

    int compare (int a, int b, int c )

    { int temp, max;

    (3) a:b;

    (4) temp:c;

    }

    【函数2.3说明】

    递归函数dec(int a[],int n)判断数组a[]的前n个元素是否是不递增的。不递增返回 1,否则返回0。

    【函数2.3】

    int dec( int a[], int n )

    {

    if(n<=1) return 1;

    if(a[0]<a[1]) return 0;

    return (5);

    }


    正确答案:(1)a[n-1]+sum(an-1)或者a[0]+sum(a+1n-1); (2)return 0; (3)temp=(a>b)? (4)max=(temp>c)? (5)dec(a+1n-1);
    (1)a[n-1]+sum(a,n-1)或者a[0]+sum(a+1,n-1); (2)return 0; (3)temp=(a>b)? (4)max=(temp>c)? (5)dec(a+1,n-1); 解析:本题考查C语言函数和一些基本运算。
    下面我们分别来分析这几个函数。在函数2.1中,题目要求用此递归函数求数组前 n个元素之和。递归函数的特点是在函数体中不停地调用函数本身,只是将其函数的参数范围改变。题目中要求我们求数组前n个元素之和,我们可以这样理解,即前n个元素之和等于第n个元素加上前n-1个元素之和,现在的问题转化成如何求前n-1个元素之和。同样的道理,可以将求前n-1个元素之和转化成求前n-2个元素之和,直到这个数小于0。从函数2.1的代码中可以知道,在计算以前,首先判断n与0的关系,如果n小于0,说明数组中无元素,因此,返回0值;如果n大于等于0,说明数组中有元素,应该返回的结果是第n个元素加上前n-1个元素之和,而前n-1个元素之和是调用函数本身来计算的。因此,第(1)空和第(2)空的答案分别是a[n-1)+sum(a,n-1),return()。
    在函数2.2中,题目要求我们在三个数中取最大数,在数学中,我们从三个数中取最大数时,一般是首先拿其中两个数比较,取较大的数再与第三个数比较,再取其较大的数,这个数就是三个数中的最大数。从函数2.2的代码中知道,三个数a、b、c,两个整型变量temp与max。根据求三个数中最大数的数学过程和函数中已给出的代码可知,第(3)空处语句应该为temp=(a>b)?a:b,求得a、b中较大数并存放在变量temp中。第(4)空处语句为max=(temp>c)?temp:c。
    在函数2.3中,题目要求判断数组a[]的前n个元素是否是不递增的。不递增返回1,否则返回0。要判断前n个元素是否是不递增的,需要判断前n-1个元素是否是不递增的,以及第n个元素与第n-1个元素的关系。此处与函数2.1一样,用的都是递归函数,只是出口不同,在函数2.1中,只要数组中没有元素了,递归结束,这里只要第n个元素大于第n-1个元素,则返回0,递归结束。又由if(a[0]a[1])语句可知,在每次调用函数时,都将其数组中的第一个元素与第二个元素比较来作为递归的出口,如果结果为假,就说明数组的前面两项的关系是不递增的,在下次调用中不用再考虑第一项。因此第(5)空应该是dec(a+1,n-1)。

  • 第18题:

    请补充函数proc,函数proc的功能是求7的阶乘。 注意:部分源程序给出如下。 请勿改动main函数和其他函数中的任何内容,仅在函数proc的横线上填入所编写的若干表达式或语句。 试题程序: include<stdio.h> long proc(int n) { if( 【1】 ) return(n*proc( 【2】 ); else if(【3】) return l; } void main { int k=7: printf("%d!=%ld\n",k,proc(k)); }


    正确答案:
    【l】n>1【2】n-1【3】n= =1
    【解析】本题求阶乘是由函数递归调用来实现的。阶乘公式为N!=N*(N-1)!,因此【l】处填“n>1”;由递归的性质可知【2】处填“n-1”;直到N=1时结束递归调用,因此【3】处填“n= =l”。

  • 第19题:

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

    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。

  • 第20题:

    已知递归函数fun的定义如下: int fun(int n) { if(n<=1)return1;//递归结束情况 else return n*fun(n-2);//递归 } 则函数调用语句fun(5)的返回值是( )。

    A.5

    B.12

    C.15

    D.30


    正确答案:C
    解析:递归函数fun被定义为含有参数int n,返同整型。其中fun函数递归调用本身,当n=1时,fun返回1,如果大于1那么执行n*fun(n-2)。所以,当n等于5时,执行5*fun(3);当3时继续调用fun,3*fun(1),即fun(5)=5*(3*fun(1)),答案为15。

  • 第21题:

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

    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时,不满足递归调用的结束条件。

  • 第22题:

    关于下面函数,哪一个是错误描述?n为整数deffactorial(n):ifn<=0:returnifn==1:return1returnn*factorial(n-1)

    A.求整数n的阶乘

    B.factorial(5)是函数调用

    C.是递归函数

    D.求任意两个数值n和n-1的乘积


    正确答案:D

  • 第23题:

    设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次。

  • 第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。