吐槽下专业书籍真是不专业

2019-12-04 10:13:20 +08:00
 jyounn

昨天面试被拒说我数据结构不行,于是拿起《数据结构与算法分析 java 语言描述第三版》打算啃.结果第一章的例子就把我搞晕了.题干是“打印输出正整数的每一位”,书里提供的解决思路如下: 考虑正整数 n=76234,首先需要打印 7623,然后再打印 4.而当 0<=n<10,则直接打印.于是根据递归的思想得到:

方法 1
void printf_Every(int num){
	if (num >= 10){
		printf_Every(num / 10);
	}
	printf(num % 10);
}

认真考虑了递归的几个基本条件,怎么看都不满足有“基准情形”这一条. 百思不得其解.按照我的理解应该是这样:

方法 2
void printDigit(int n) {
   //基准情形
   if(n<10) {
       System.out.print(n);
   } else {
       //不断推进
       printDigit(n/10);
       System.out.print(n%10);
   }
}

测试了也没问题.转头思考了一下,方法 2 能简化成方法 1.这才明白过来.😷 我就吐槽下书本能不能按照书本自身的标准解释循序渐进地讲解问题.不要一上来就各种简化版、阉割版. 对待新人太不友好了.

9496 次点击
所在节点    程序员
76 条回复
lhx2008
2019-12-04 10:47:31 +08:00
@lhx2008 打错了,所以别人写递归就是装 B 用的
collery
2019-12-04 10:47:38 +08:00
我才学 C 语言写的就是第二版。看了重构后,写了第一版
jorneyr
2019-12-04 10:52:20 +08:00
@jackrebel 是的,最近畅销的 《漫画算法:小灰的算法之旅书籍》一书里的代码也是错误百出,很多都是编译不通过的。
jaynos
2019-12-04 10:53:04 +08:00
我觉得可以多看看书再来吐槽作者没脑子还是自己菜
crazypig14
2019-12-04 10:54:12 +08:00
再体谅新人也逃不过菜是原罪啊
zunceng
2019-12-04 11:00:25 +08:00
面试官眼光独到。。。
VoidChen
2019-12-04 11:01:34 +08:00
第一反应是转字符串循环一下就完事了。。
jmc891205
2019-12-04 11:07:19 +08:00
建议看更专业的书籍:TAOCP 或者 CLRS (手动狗头
l8g
2019-12-04 11:20:24 +08:00
看楼主过往回复也不是写代码的新手了,看了这个帖子感觉面试官看的还是挺准确的。。。
另外这种简单的东西为什么要用递归?误人子弟的书。
hdbzsgm
2019-12-04 11:29:04 +08:00
@l8g #29 用递归误人子弟?
l8g
2019-12-04 11:33:21 +08:00
@hdbzsgm 看清楚我的回复,我是说这种简单的逻辑用递归是误人子弟。
hdbzsgm
2019-12-04 11:35:59 +08:00
@l8g #31 我觉得不管什么逻辑 简单还是复杂 教材教导第一步思考用递归都是正确的
Cooky
2019-12-04 11:40:55 +08:00
@l8g 这么简单的都有看不懂的,整点复杂的不直接劝退了?
chickenJuicer
2019-12-04 11:46:21 +08:00
这不是挺专业的么, 书上要是写成你的那种写法才叫不够精简吧..
iyiluo
2019-12-04 11:47:00 +08:00
这不是一样的吗?基准情形不一定要放开头,有问题的是参数没校验,不过关注点不在那里可以理解。
jasonyang9
2019-12-04 11:48:41 +08:00
这是再正常不过的递归实现了,自己人肉步进一下就知道它是满足“基准情形”的啊
l8g
2019-12-04 11:58:04 +08:00
@hdbzsgm 好吧,作为教材我这么说确实有失偏颇,不过我觉得要讲递归的话可以用更经典的例子。
rioshikelong121
2019-12-04 12:11:56 +08:00
这个例子确实一般。
xomix
2019-12-04 12:18:32 +08:00
方法二的输出都是乱的,方法一可以很明白的解释什么是递归,递归做了什么,如何退出。方法二我看的脑仁疼。
MisakaTang
2019-12-04 12:23:24 +08:00
递归终止条件写后面已经可以跟专业水平不过关挂钩了吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/625756

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX