关于下面函数,哪一个是错误描述?#n为整数defsum(n):ifn<=0:return0returnn+sum(n-1)

题目
关于下面函数,哪一个是错误描述?n为整数defsum(n):ifn<=0:return0returnn+sum(n-1)

A.功能等价于下面的函数#n为整数defsum2(n):return(1+n)*n/2

B.sum(5)是函数调用

C.是递归函数

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

参考答案和解析
正确答案:D
如果没有搜索结果或未解决您的问题,请直接 联系老师 获取答案。
相似问题和答案

第1题:

执行下面程序段,语句3的执行次数为______。for(i=0;ii;j++)state;A.n(n+2)/2B

执行下面程序段,语句3的执行次数为______。 for(i=0;i<n-1;i++) for(j=n;j>i;j++) state;

A.n(n+2)/2

B.(n-1)(n+2)/2

C.n(n+1)/2

D.(n-1)(n+2)


正确答案:B
解析:本题考查如何衡量算法的复杂度,根据题目可以看出,两层循环每次执行的次数是不相等的,第一次循环执行了n次,第二次循环只执行了n-1次,直到最后一次循环,他执行了2次,这样就是一个等差数列的求和,可得到总的执行次数为(n-1)(n+2)/2。

第2题:

假设把整数关键码K散列到有N个槽的散列表,以下哪些散列函数是好的散列函数()

A.h(K)=KmodN

B.h(K)=1

C.h(K)=K/N

D.h(K)=(K+rand(N))modN,rand(N)返回一个0到N-1的整数


正确答案:A

第3题:

下面程序在调试时出现了死循环 Private Sub Command1_Click() n=InputBox("请输入—个整数") Do Ifn Mod 2=0 Then n=n+1 Else n=n+2 End If Loop Until n=1000 End Sub 下面关于死循环的叙述中正确的是______。

A.只有输入的n是偶数时才会出现死循环,否则不会

B.只有输入的n是奇数时才会出现死循环,否则不会

C.只有输入的n是大于1000的整数时才会出现死循环,否则不会

D.输入任伺整数都会出现死循环


正确答案:D
解析:Do…Loop Until是先执行循环体,再判断条件表达式,如果表达式的值为True,则执行Loop后面的语句,如果为False,则继续执行循环体。在此题中,“偶数加1”与“奇数加2”都不可能等于1000,所以循环的条件不可能成立,输入任何整数都会出现死循环。

第4题:

下面算法是实现对n个整数的序列进行选择排序,其中序列的“长度”n为问题的规模。该算法的时间复杂度为(11)。 void select_sort(int a[],int n){ //将a中整数序列重新排列成从小到大有序的整数序列 for(i=0;i<n-1;++i){ j=i; for(k=i+1;k<n;++k)if(a[k]<a[j])j=k; if(j!=i){w=a[j];a[j];a[i];a[i]=w} )//select_sort

A.O(n2)

B.O(n3)

C.O(n4)

D.O(n)


正确答案:A
解析:算法中的控制结构是两重循环,所以基本操作是在内层循环中的“比较”,它的重复执行次数是:对时间复杂度而言,只需要取最高项,并忽略常数系数。

第5题:

在下面循环语句中循环体执行的次数为( )。

for(int i=0; i

if(i>n/2) break;

A、n/2

B、n/2+1

C、n/2-1

D、n-1


参考答案B

第6题:

D)DEFABC

(32)某人为计算 n!(0<n<=12)编写了下面的函数过程:

Private Function fun(n As Integer) As Long

Dim p As Long

p=1

For k=n-1 To 2 Step-1

p=p*k

Next k

fun=p

End Function

在调试时发现该函数过程产生的结果是错误的,程序需要修改。下面的修改方案中有3 种是正确的,错误

的方案是( )。

A)把 p=1 改为 p=n

B)把 For k=n-1 To 2 Step-1 改为 For k=1 To n-1

C)把 For k=n-1 To 2 Step-1 改为 For k=1 To n

D)把 For k=n-1 To 2 Step-1 改为 For k=2 To n


正确答案:B

(32)【答案】B)
【解析】题干中的错误在于求n!,却少乘了n,选项B)也犯了同样的错误,所以答案选B。

第7题:

T(n)=O(f(n))中,函数O()的正确含义为

A.T(n)为f(n)的函数

B.T(n)为n的函数

C.存在足够大的正整数M,使得T(n)≤M×f(n)

D.存在足够大的正整数M,使得M×f(n)≤T(n)


正确答案:C

第8题:

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

int sum ( int n ) {

if ( n==0 )

return 0;

else

return n+sum ( n-1 ) ;

}

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


正确答案:

第9题:

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

第10题:

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

【说明】

有n个整数,使其前面各数顺序向后移m个位置,最后m个数变成最前面的m个数。

【函数】

main()

{

int number[20],n,m,i;

printf("the total numbers is:");

scanf("%d",&n);

printf("back m:");

scanf("%d",&m);

for(i=0;i<=n-1;i)

scanf("%d,",&number[i]);

(1);

for(i=0;i<=n-1;i)

printf("%d,",number[i]);

}

move(array,n,m)

int n,m,array[20];

{

int *p,array_end;

array_end=(2);

for(p=array[n-1];(3);p--)

*p=(4);

*array=array_end;

m--;

if(m>0) (5);

}


正确答案:(1)move(numbernm) (2)*(array[n-1]) (3)p>array (4)*(p-1) (5)move(arraynm)
(1)move(number,n,m) (2)*(array[n-1]) (3)p>array (4)*(p-1) (5)move(array,n,m) 解析:本题考查数字顺序移动和数组的相关知识。
从数据结构的角度出发,数字在数组中顺序移动,就是将数字一个一个往后搬,例如,将n-1位置的数字移到n位置,然后再把n-2位置的数字移到n-1位置,其实这是一个简单的数字移动。我们只需要取出第n个位置的数字并保存在一个临时变量中,然后,其他的就按顺序依次移动即可,直到一次整体移动完成,我们再从临时变量中取回数字并将其放在数组的第一个位置中。重复这个过程m次,整个数组就往后移动了m个位置。
首先,我们来看一下主函数,在主函数里面声明了一个容量为20的整型数组 number[20]和其余3个整型变量,数组用来存储我们输入的待处理的数,而变量m、n分别用于存放我们要移动位置的个数和输入整数的个数。第一个循环语句用于n个整数的输入,第二个循环语句用于n个整数的输出,在这中间应该还有一个处理来完成将n个整数顺序向后移m个位置,并让最后m个数变成最前面的m个数这个功能,从下面的程序段我们知道,这里是调用函数muve(number,n,m)来完成的。因此,第(1)空填 move(nurnber,n,m),在调用时我们需要注意参数的传递。
再来看move(array,n,m)函数,在此函数中,同样声明了一个容量为20的整型数组和 2个整型变量,另外还声明了一个指针变量p。由*array=array_end,结合第(2)空来看,这里是把数组中最后位置的数取出存放在array_end变量当中。因此,第(2)空应填 *(array[n-1])。
第(3)空是常见的在循环语句中表示判断的语句,由于“p=array[n-1]”把数组最末的地址赋给了指针p,只要p的值大于数组的起始地址循环就可以继续,因此,第(3)空应填p>array。
第(4)空要完成的任务是将数字后移,因此,第(4)空为*p-1。从程序来分析,数组每移动完成一次,m的值就减一,而现在只有移动m次的功能没有实现,因此,只要m值大于0,就调用函数自身来实现再次移动。因此,第(5)空填写move(array,n,m)进行递归调用。

更多相关问题