数据结构:笔记-递归算法

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

椒椒。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值