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

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

9213 次点击
所在节点    程序员
76 条回复
xidaduo
2019-12-04 10:16:49 +08:00
………………………………………………………………………………………………………………………………………… 这哪是简化阉割版??????????
jackrebel
2019-12-04 10:19:18 +08:00
我认识一个作者, 还算是畅销的。 他跟我说, 不要相信绝大部分作者, 他们都是从这里那里扣一点, 代码有时候凭脑子想的, 没有实践过, 有时间结论可能都是错的, 但是已经印刷出来了。。没办法。 哈哈哈。
jyounn
2019-12-04 10:19:24 +08:00
@xidaduo 是简化版,不是阉割版.我只是概括说一下现象.
ayase252
2019-12-04 10:19:36 +08:00
.....在 if 外面就不算 base case 吗?
jyounn
2019-12-04 10:23:02 +08:00
@jackrebel 所以还是要自己动手实操.毕竟作者的思路都是坐飞机的.
seki
2019-12-04 10:25:02 +08:00
对新人不友好和专业没什么关系。专业就是保证准确性的前提下,做到代码的简洁,直观等
cmdOptionKana
2019-12-04 10:26:57 +08:00
你的标题是“不专业”,你的结论是“对新人不友好”。牛头不搭马嘴。
jyounn
2019-12-04 10:28:24 +08:00
@ayase252 你能看出方法 1 包含“基准情形”这一条递归的基本法则?反正第一眼我是不能
jyounn
2019-12-04 10:30:07 +08:00
@seki 不直观导致对新人不友好
scukmh
2019-12-04 10:31:55 +08:00
不专业咋就和对新人不友好等同了。
tdssssss
2019-12-04 10:32:55 +08:00
方法说的很清楚了,代码只是省去了 else 而已。。对比数学书里常见的“显然”“易证”,已经够友好了
tonnycao
2019-12-04 10:35:44 +08:00
我记得原来看 structs2 的一本书,作者说他有意在编码的时候写错,就是让读者自己把代码调通,防止读者只抄代码不理解原理。
inhzus
2019-12-04 10:36:17 +08:00
就这?就这?就这?

点开标题前还以为又发现了什么写作 /翻译问题很多的书(比如我最近在看的多处理器编程的艺术,作者写的时候本来就比较晦涩,翻译的更是 shit ),感情就交换了下 if else 顺序就让你觉得不专业了?

今日热帖预订
strive
2019-12-04 10:39:28 +08:00
没看出哪里不专业
strive
2019-12-04 10:40:10 +08:00
反而方法一不用再进行重构,非常专业
galaxy21
2019-12-04 10:40:23 +08:00
看不懂不是因为你自己菜?????
Tumblr
2019-12-04 10:42:09 +08:00
感觉好麻烦……
用 PowerShell 直接 $int.ToString().ToCharArray()
ipwx
2019-12-04 10:42:09 +08:00
可是,人家作者说不定真的第一反应写出来的是版本一,根本不是先写版本二再简化成版本一的呀?
lhx2008
2019-12-04 10:46:53 +08:00
你不如吐槽,明明是个迭代为什么要写成递归,浪费空间。所以别人写迭代就是装 B 用的。
shintendo
2019-12-04 10:47:12 +08:00
基准情形就是在某些条件下不会调用自身,上面的代码把调用包在 if 里,不是完全符合吗?难道放 if 里认识放 else 就不认识了么……

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

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

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

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

© 2021 V2EX