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

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.这才明白过来.😷 我就吐槽下书本能不能按照书本自身的标准解释循序渐进地讲解问题.不要一上来就各种简化版、阉割版. 对待新人太不友好了.

9912 次点击
所在节点    程序员
76 条回复
niming007zh
2019-12-04 12:37:06 +08:00
数据结构 不建议看那些著名的其实是垃圾的书,推荐看邓俊辉的
lhx2008
2019-12-04 12:49:01 +08:00
其实吧,这本书序言就写的很清楚了,是给进阶用的,内容多书又薄,不适合自学。难度也比红皮那本大多了,建议楼主还是看算法第四版,每个细节都有讲解
passerbytiny
2019-12-04 12:58:30 +08:00
@l8g 教人算法,和教人优化算法,是两本书。所以你也就过过“误人子弟的书”的嘴瘾,别人能出书。
constexpr
2019-12-04 13:16:54 +08:00
如果把 ‘’ 直接 ‘’ 改为 ‘’只 ‘’, 这样就好理解了。他说的直接意思是不再递归了,只打印,而其他情形是都做。
jon
2019-12-04 13:51:12 +08:00
我怎么觉得第一段代码更好懂
cominghome
2019-12-04 14:19:55 +08:00
我买过一堆工具书,有几本销量 top 的,内容还不如官方文档来得深入,甚至搜索引擎都比他讲得清楚。
YannLu
2019-12-04 14:23:13 +08:00
楼主幽默了,建议多看看代码规范或者如何写出优雅代码之类的书或文章,讲道理工作一两年后心里就应该有数了,上来就该写成方式 1 而不是写成 2 改成 1
yazinnnn
2019-12-04 14:27:21 +08:00
后序递归......
楼主可以慢慢看,看到二叉树就明白了
NeezerGu
2019-12-04 14:47:27 +08:00
的确第二段一看就懂,
但第一段看两遍也该懂了吧???
他有什么特别难以理解的地方吗???

如果有,没错,这就是编程的门槛,转行吧……
misaka19000
2019-12-04 14:57:33 +08:00
菜就多练,吐槽书是不对的
wutiantong
2019-12-04 15:07:01 +08:00
别吐槽了,好好学习吧。
shfanzie
2019-12-04 15:07:56 +08:00
哈哈哈哈,原谅我不厚道的笑了。菜就多练,多看看别人规范代码是怎么写的
winglight2016
2019-12-04 15:16:54 +08:00
这也能算问题?你不是数据结构不行,而是根本不懂 java 吧?或者完全没有编程概念?

不过,这个问题明明一句 print(String.valueOf(val))就好了,为什么需要递归?
Jrue0011
2019-12-04 15:54:06 +08:00
作者不是为了解这道题而用递归,而是在第一章为了简单介绍递归思想和设计法则举了这个例子,楼主应该把完整的段落发上来
JerryCha
2019-12-04 16:10:37 +08:00
字里行间透露着这书没把话讲明白的感觉。
hikarugo
2019-12-04 16:38:34 +08:00
我就说一句,你态度有问题。
一般人碰到这种情况是先自己思考为什么书上答案和我简单想到的不一致,是不是我考虑的不全面,而不是吐槽书本为什么出现的不是我想的。你这种想法很明显是碰到问题先不反思自己而是先去怪其他因素的思维方式。即使书本显示的写法 2,反之楼主想到写法 1,楼主是不是就会吐槽这本书好辣鸡啊,写的都是复杂版本,一点不优雅
edussx
2019-12-04 17:03:12 +08:00
https://en.wikipedia.org/wiki/Guard_(computer_science)

这种写法叫 Guard Clause,我 code review 的时候看到有人写多重嵌套 if 或者滥用 else 都会让他改写成这样
KentY
2019-12-04 17:14:10 +08:00
LZ 这个问题跟书的质量关系不大.
但是中文技术书籍不管原创的还是翻译的, 质量差的是大多数. 有时候翻译的人本身都缺乏该领域的经验.
现在技术资源在网上都挺多的文章. 如果非要看书, 选择国外的原著经典书. 技术的英语很容易, 别上来就怵头, 看几章再说. 比翻译的强不知道多少.
举例一下, 20 多年前, 我读过机械出版社的 thinking in java. 这个都知道吧? 蓝绿封皮的, 翻译的烂的不行, 根本看不下去 还是花好像 80 来欧买了本原文.
rabbey912
2019-12-04 18:19:46 +08:00
楼主的算法基础好像也需要补一补 这种吐槽有点像初中生拿着高中生的教材说老师写得太难了
shijingshijing
2019-12-04 19:40:17 +08:00
递归就应该按照第一种方法写,第二种编译的时生成的代码不如第一种精简,效率是否和第一种一样不好说,但无疑第一种是高效的。

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

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

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

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

© 2021 V2EX