更多"计算N!的递归算法如下,求解该算法的时间复杂度时,只考虑相乘操作,则算"的相关试题:
[单项选择]将一个递归算法改为对应的非递归算法时,通常需要使用()。
A. 优先队列
B. 队列
C. 循环队列
D. 栈
[单项选择]设n的初始值为正整数,设计一个递归算法如下:
int fact (int n) {
if (n<=0) return 1;
else return (n*fact(n-1));
}
以下叙述中正确的是______。
A. 计算fact(n)需要执行n次函数调用
B. 计算fact(n)需要执行n+1次函数调用
C. 计算fact(n)需要执行n+2次函数调用
D. 计算fact(n)需要执行n-1次函数调用
[单项选择]
设求解某问题的递归算法如下:
F(int n)
if n=1
Move(1)
else
F(n-1);
Move(n);
F(n-1);
求解该算法的计算时间时,仅考虑算法Move所做的计算为主要计算,且Move为常数级算法。则算法F的计算时间T(n)的递推关系式为 (9) ;设算法Move的计算时间为k,当 n=4时,算法F的计算时间为 (10) 。
(9)处填()。
A. T(n)=T(n-1)+1
B. T(n)=2T(n-1)
C. T(n)=2T(n-1)+1
D. T(n)=2T(n+1)+1
[简答题][说明]
下面的程序利用递归算法计算x和y的最大公约数。
[函数2.1]
main ( )
int x,y,k,t;
scanf(" % d% d" , &x, &y);
if(x>y) t=x;x=y; y=t;
(1) ;
while(k! =0)
y=x;
(2) ;
k=y%x;
prinff( "% d" ,x);
[函数2.2说明]
函数fun(char *str,char *substr的功能是计算子串sugbstr在串str中出现的次数。
[函数2.2]
fun(ehar * str, char * substr)
int x,y,z;
(3) ;
for(x=0;str[ x] ! = ’/O’;x + + )
for(y=x,z=0;sabstr[z] = =str[y]; (4) ,y+ +)
if( (5) = =’/0’)
num + +;
break;
return(num);
[简答题]请编写一个函数comm(int n,int k),该函数将用递归算法计算从n个人中选择k个人组成一个委员会的不同组合数,由n个人里选k个人的组合数=由(n-1)个人里选k个人的组合数+由(n-1)个人里选(k-1)个人的组合数。
注意:部分源程序已存在文件test41_2.cpp中。
请勿修改主函数main和其他函数中的任何内容,仅在函数comm的花括号中填写若干语句。
源程序文件test41-2.cpp清单如下:
#include<iostream.h>
int comm(int n, int k)
void main ( )
int n=7, k=3;
cout<<"n=7,k=3"<<endl;
cout<<comm(n,k)<<endl;
[简答题]下列给定程序中函数fun的功能是:用递归算法计算斐波拉契数列中第n项的值。从第1项起,斐波拉契数列为:1,1,2,3,5,8,13,21,…
请改正程序中的错误,使它能得出正确结果。
注意:不要改动mam函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include < stdio.h >
long fun (int g)
/**********found********** /
switch (g);
case 0 :return 0;
/**********found********** /
case 1; case 2 : return 1;
return (fun (g-1)+fun (g-2));
void main ( )
long fib; int n;
printf ("Input n:");
scanf ("% d", &n);
printf ("n=%d/n", n);
fib=fun (n);
printf(" fib=% d/n/n", fib);
[简答题]下列给定程序中,函数fun的功能是:用递归算法计算斐波拉契数列中第n项的值。从第1项起,斐波拉契数列为:1,1,2,3,5,8,13,21,…
例如,若给n输入7,则该项的斐波拉契数值为13。
请改正程序中的错误,使它能得出正确结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!
试题程序:
#include<stdio.h>
long fun(int g)
/********found********/
switch(g);
case oreturn 0;
/********found********/
case 1;case 2;return 1;
return(fun(g-1)+fun(g-2));
void main( )
long fib;int n;
printf("Input n:");
scanf("%d".&n);
printf("n=%d/n",n);
fib=fun(n);
printf("fib=%d/n/n",fib);
[单项选择]
若一个问题的求解既可以用递归算法,也可以用递推算法,则往往用 (14) 算法,因为 (15) 。
(14)处填()。
A. 先递归后递推
B. 先递推后递归
C. 递归
D. 递推
[单项选择]
若一个问题的求解既可以用递归算法,也可以用递推算法,则往往用()算法,因为()。
因为()
A. 递推的效率比递归高
B. 递归宜于问题分解
C. 递归的效率比递推高
D. 递推宜于问题分解
[填空题]下列给定程序中,函数fun( )的功能是:用递归算法计算斐波拉契级数列中第n项的值。从第一项起,斐波`拉契级数序列为1, 1,2,3,5,8,13,21,……例如,若给n输入7,
该项的斐波拉契级数值为13。
请改正程序中的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
试题程序:
#include <stdio.h>
long fun(int g)
{
/*************found**************/
switch(g);
{case 0:return 0;
switch(g)
case 1; case 2:return 1;
}
return (fun(g-1)+fun(g-2));
}
main( )
{
long fib; int n;
printf("Input n:");scanf("%d",&n);
printf("n-%d/n",n);
fib=fun(n);
printf("fib=%d/D/n",fib);
}
[单项选择]
若一个问题的求解既可以用递归算法,也可以用递推算法,则往往用()算法,因为()。
若一个问题的求解既可以用递归算法,也可以用递推算法,则往往用()算法。
A. 先递归后递推
B. 先递推后递归
C. 递归
D. 递推
[单项选择]一个递归算法必须包括( )。【武汉大学2000二、21
A. 递归部分
B. 终止条件和递归部分
C. 迭代部分
D. 终止条件和迭代部分