1、递归函数最终会结束,那么这个函数一定?
正确答案: B 你的答案: B (正确)
使用了局部变量
有一个分支不调用自身
使用了全局变量或者使用了一个或多个参数
没有循环调用
2、执行完下列语句段后,i值为()
int f(int x){
return ((x>0)?x*f(x-1):2)
}
int i;
i=f(f(2));
正确答案: B 你的答案: B (正确)
4
48
8
解析: ((x>0)?x*f(x-1):2)
如果x大于0则得到xf(x-1);如果x小于0则得到2.
3、以下程序是用来计算两个非负数之间的最大公约数:
long long gcd(long long x, long long y) {
if (y == 0)
return x;
else
return gcd(y, x % y);
}
我们假设x,y中最大的那个数的长度为n,基本运算时间复杂度为O(1),那么该程序的时间复杂度为():
正确答案: B 你的答案: C (错误)
O(1)
O(logn)
O(n)
4、4个圆盘的Hanoi塔,总的移动次数为()
正确答案: C 你的答案: D (错误)
7
8
15
16
解析 2的n次方减一。
5、凡是递归定义的数据结构都可以用递归算法来实现它的操作。( )
6、以下关于递归调用的说法正确的是()
正确答案: C 你的答案: C (正确)
函数间接调用自己不是递归
递归调用可以用队列实现
递归调用可以用栈实现
函数直接调用自己是递归
7、用递归算法实现转换,如“uvxyz”转换后为“zyxvu”,请选择合适的语句()
void rev_str(char *s,int len)
{
char ch;
if ( len > 1)
{
ch = *s;
*s = *(s+len-1);
*(s+len-1) = ch;
rev_str(?,?);
}
}
正确答案: D 你的答案: D (正确)
s,len-1
s,len-2
s+2,len-2
s+1,len-2
8、递归函数中的形参是()
正确答案: A
自动变量
外部变量
静态变量
可根据需要自定义存储类型
9、n!后面有多少个0,6!=12345*6=720.720后面有1个0,n=10000,求n!。
正确答案: B 你的答案: B (正确)
2498
2499
2450
2451
解析:发现一个简便方法;
10000/5=2000 有2000个能被5整除
2000/5=400 这2000个里面能被5整除有400个(2000个已被5除过1次。能除第二次的有400)
400/5=80 同理 80个
80/5=16 同理 16个
16/5=3余1 同理 3个
结果2000+400+80+16+3=2499
用短除法
10、对递归程序的优化的一般的手段为()
正确答案: A 你的答案: C (错误)
尾递归优化
循环优化
堆栈优化
停止值优化
11、设有递归算法如下,
int x(int n)
{
if(n<=3)
return 1;
else
return x(n-2)+x(n-4)+1;
}
试问计算x(x(8))时需要计算()次x函数。
正确答案: D 你的答案: C (错误)
8
9
16
18