[面试题求解] 两道递归选择题求解

林初茵 2013-02-26 02:53:44
两道都是不定项选择题
10. The recursive function mystrlen(char *buf, int N)defined below tries to find the length of the first null-terminated string in the buffer buf(not counting the null character), where the buffer size is N. For instance if
buf = {'b','u','f','f','e','r','\0','a','b','c'}
with N = 10 is the input, the desired output is 6. If the buffer does not have any null character the desired output is N.
int mystrlen(char *buf, int N)
{
return mystrlen(buf, N/2) + mystrlen(buf + N/2, N/2);
}

What are all the possible mistakes in the code? (代码中可能的错误是哪个/些)
A. There are no mistakes in the code
B. There is no termination of recursion
C. The addition of the the two mystrlen()s in the recursion is incorrect
D. The use of N/2 in the recursion is incorrect
E. Recursion cannot be used to calculate this function

11. Continuing the above example, which of the following recursive implementations fix the code fully? (如果要修正以上的错误,应该)
A. No change to the code in example above
B.
int mystrlen(char *buf int N)
{
if(N==0)
return 0;
else
return mystrlen(buf, N/2) + mystrlen(buf + N/2, N/2);
}
C.
int mystrlen(char *buf int N)
{
if(N==0||buf[0]==0)
return 0;
else if (N==1)
return 1;
int t = mystrlen(buf, N/2);
if(t<N/2)
return t;
else
return (t + mystrlen(buf + N/2, (N+1)/2));
}
D. None of above
...全文
4243 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
fsy351 2013-03-05
  • 打赏
  • 举报
回复
貌似组合数学或数论的东西啊。。。
onlyonename 2013-03-04
  • 打赏
  • 举报
回复
0 1 1 2 3 5 8 3 1 4 5 9 4 3 7 0 7 0 7 0 ..... 看明白?
skywalker0725 2013-03-02
  • 打赏
  • 举报
回复
我晕,都没看懂~~~
d529684722 2013-03-01
  • 打赏
  • 举报
回复
hao nan
林初茵 2013-02-27
  • 打赏
  • 举报
回复
谢谢大家 基本明白了
赵4老师 2013-02-27
  • 打赏
  • 举报
回复
“给定一个小点的输入,完整单步跟踪(同时按Alt+7键查看Call Stack里面从上到下列出的对应从里层到外层的函数调用历史)一遍。”是理解递归函数工作原理的不二法门! 递归函数关注以下几个因素 ·退出条件 ·参数有哪些 ·返回值是什么 ·局部变量有哪些 ·全局变量有哪些 ·何时输出 ·会不会导致堆栈溢出
雷神风暴烈酒 2013-02-26
  • 打赏
  • 举报
回复
引用 18 楼 jinder22 的回复:
还是不懂 木乱阿
楼主 http://bbs.csdn.net/topics/390372779?page=1#post-393768505 去看看我的回复 不知是否正确
yiuwing 2013-02-26
  • 打赏
  • 举报
回复
1 BC 2 C
ken_scott 2013-02-26
  • 打赏
  • 举报
回复
其他两个看不懂
ken_scott 2013-02-26
  • 打赏
  • 举报
回复
记: result = F(n) % 5 (1) 可推导出: F(n) = 5 * F(n-4) + 3 * F(n-5) 得: result = F(n) % 5 = (3 * F(n-5)) % 5 (2) 由(1), (2)可知: 在此问题中, F(n) 与 3 * F(n-5) 等效, 记做 F(n) <==> 3 * F(n-5) (3) 于是递归可得: F(n-5) <==> 3 * F((n-5) - 5) 即有: 3 * F(n-5) <==> 3 * ( 3 * F((n-5) - 5) <==> (9 * F(n-10)) <==> (5 * F(n-10) + 4 * F(n-10)) <==> (4 * F(n-10)) (4) 由(3), (4)可知: F(n) <==> 4 * F(n-10) (5) 于是可得: 4 * F(n-10) <==> 4 * (4 * F((n-10) - 10) <==> 16 * F(n-20) <==> 15 * F(n-20) + 1 * F(n-20) <==> F(n-20) (6) 由(5), (6)可知: F(n) <==> F(n-20) 所以, F(1025) <==> F(1005) <==> F(985) <==> F(965) <==> F(5) 由(3)知: F(5) <==> 3 * F(5-5) <==> 3 * F(0) <==> 0 所以, F(1025) % 5 <==> 0 % 5 <==> 0 即有: F(1025) % 5 == 0
maoloverme1 2013-02-26
  • 打赏
  • 举报
回复
引用 17 楼 Neversaydie_D 的回复:
引用 16 楼 jinder22 的回复: 1 b我能理解 c为什么也选了阿? 求解是 return mystrlen(buf, N/2) + mystrlen(buf + N/2, N/2); 并不能得到所有答案
如果null出现在mystrlen(buf, N/2)中,那么就不能加上mystrlen(buf + N/2, N/2);
林初茵 2013-02-26
  • 打赏
  • 举报
回复
还是不懂 木乱阿
雷神风暴烈酒 2013-02-26
  • 打赏
  • 举报
回复
引用 16 楼 jinder22 的回复:
1 b我能理解 c为什么也选了阿? 求解是
return mystrlen(buf, N/2) + mystrlen(buf + N/2, N/2); 并不能得到所有答案
林初茵 2013-02-26
  • 打赏
  • 举报
回复
1 b我能理解 c为什么也选了阿? 求解是
雷神风暴烈酒 2013-02-26
  • 打赏
  • 举报
回复
引用 13 楼 maoloverme1 的回复:
1 BC 2 C
确实。。应该是BC
雷神风暴烈酒 2013-02-26
  • 打赏
  • 举报
回复
10 B 11 C 可对否
maoloverme1 2013-02-26
  • 打赏
  • 举报
回复
1 BC 2 C
林初茵 2013-02-26
  • 打赏
  • 举报
回复
谢谢 那其他两道题呢?
雷神风暴烈酒 2013-02-26
  • 打赏
  • 举报
回复
引用 10 楼 jiujiujiuchun 的回复:
看了下你们的回复,这样应该是好懂点吧 f(5n) = f(5n-1) + f(5n-2) = f(5n-2) + 2f(5n-3) + f(5n-4) = 5*f(5n-4) + 3*f(5(n-1)); 3*f(5(n-1))除5取余的值与 f(5n)一致 以此类推,f(5n)%5 与 f(5) 一致,所以为0 ……
正解
IT民工TI 2013-02-26
  • 打赏
  • 举报
回复
看了下你们的回复,这样应该是好懂点吧 f(5n) = f(5n-1) + f(5n-2) = f(5n-2) + 2f(5n-3) + f(5n-4) = 5*f(5n-4) + 3*f(5(n-1)); 3*f(5(n-1))除5取余的值与 f(5n)一致 以此类推,f(5n)%5 与 f(5) 一致,所以为0
加载更多回复(9)
《妙趣横生的算法(C语言实现)》可作为算法入门人员的教程,也可以作为学习过C语言程序设计的人士继续深造的理想读物,也可作为具有一定经验的程序设计人员巩固和提高编程水平,查阅相关算法实现和数据结构知识的参考资料,同时也为那些准备参加与算法和数据结构相关的面试的读者提供一些有益的帮助。最大的特色在于实例丰富,题材新颖有趣,实用性强,理论寓于实践之中。理论与实践相结合,旨在帮助读者理解算法,并提高C语言编程能力,培养读者的编程兴趣,并巩固已有的C语言知识。全书分为2个部分共10章,内容涵盖了编程必备的基础知识(如数据结构、常用算法等),编程实例介绍,常见算法和数据结构面试题等。可以使读者开阔眼界,提高编程的兴趣,提高读者的编程能力和应试能力。 目录: 第1部分 基础篇 第1章 数据结构基础 1.1 什么是数据结构 1.2 顺序表 1.2.1 顺序表的定义 1.2.2 向顺序表中插入元素 1.2.3 从顺序表中删除元素 1.2.4 实例与分析 1.3 链表 1.3.1 创建一个链表 1.3.2 向链表中插入结点 1.3.3 从链表中删除结点 1.3.4 销毁一个链表 1.3.5 实例与分析 1.4 栈 1.4.1 栈的定义 1.4.2 创建一个栈 1.4.3 入栈操作 1.4.4 出栈操作 1.4.5 栈的其他操作 1.4.实例与分析 1.5 队列 1.5.1 队列的定义 1.5.2 创建一个队列 1.5.3 入队列操作 1.5.4 出队列操作 1.5.5 销毁一个队列 1.5.6 循环队列的概念 1.5.7 循环队列的实现 1.5.8 实例与分析 1.6 树结构 1.6.1 树的概念 1.6.2 树结构的计算机存储形式 1.6.3 二叉树的定义 1.6.4.二叉树的遍历 1.6.5 创建二叉树 1.6.6 实例与分析 1.7 图结构 1.7.1 图的概念 1.7.2 图的存储形式 1.7.3 邻接表的定义 1.7.4.图的创建 1.7.5 图的遍历(1)——深度优先搜索 1.7.6 图的遍历(2)——广度优先搜索 1.7.7 实例与分析 第2章 常用的查找与排序方法 2.1 顺序查找 2.2 折半查找 2.3 排序的概述 2.4 直接插入排序 2.5 选择排序 2.6 冒泡排序 2.7 希尔排序 2.8 快速排序 第3章 常用的算法思想 3.1 什么是算法 3.2 算法的分类表示及测评 3.2.1 算法的分类 3.2.2 算法的表示 3.2.3 算法性能的测评 3.3 穷举法思想 3.3.1 基本概念 3.3.2 寻找给定区间的素数 3.3.3 TOM的借书方案 3.4 递归与分治思想 3.4..1 基本概念 3.4.2 计算整数的划分数 3.4.3 递归的折半查找算法 3.5 贪心算法思想 3.5.1 基本概念 3.5.2 最优装船问题 3.6 回溯法 3.6.1 基本概念 3.6.2 四皇后问题求解 3.7 数值概率算法 3.7.1 基本概念 3.7.2 计算定积分 第2部分 编程实例解析 第4章 编程基本功 4.1 字符类型统计器 4.2 计算字符的ASCII码 4.3 嵌套if.else语句的妙用 4.4 基于switch语句的译码器 4.5 判断闰年 4.6 指针变量作参数 4.7 矩阵的转置运算 4.8 矩阵的乘法运算 4.9 巧用位运算 4.10 文件的读写 4.11 计算文件的大小 4.12 记录程序的运行时间 4.13 十进制/二进制转化器 4.14 打印特殊图案 4.15 打印杨辉三角 4.16 复杂级数的前n项和 4.17 寻找矩阵中的“鞍点” 4.18 n阶勒让德多项式求解 4.19 递归反向输出字符串 4.20 一年中的第几天 第5章 数学趣题(一) 5.1 舍罕王的失算 5.2 求两个数的最大公约数和最小公倍数 5.3 歌德巴赫猜想的近似证明 5.4 三色球问题 5.5 百钱买百鸡问题 5.6 判断回文数字 5.7 填数字游戏求解 5.8 新郎和新娘 5.9 爱因斯坦的阶梯问题 5.10 寻找水仙花数 5.11 猴子吃桃问题 5.12 兔子产仔问题 5.13 分解质因数 5.14 常胜将军 5.15 求兀的近似值 5.16 魔幻方阵 5.17 移数字游戏 5.18 数字的全排列 5.19 完全数 5.20 亲密数 5.21 数字翻译器 5.22 递归实现数制转换 5.23 谁在说谎 第6章 数学趣题(二) 6.1 连续整数固定和问题 6.2 表示成两个数的平方和 6.3 具有特殊性质的数 6.4 验证角谷猜想 6.5 验证四方定理 6.6 递归法寻找最小值 6.7 寻找同构数 6.8 验证尼科彻斯定理 6.9 三重回文数字 6.10 马克思手稿中的数学题 6.11 渔夫捕鱼问题 6.12 寻

64,663

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧