昨天面试被拒说我数据结构不行,于是拿起《数据结构与算法分析 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.这才明白过来.😷 我就吐槽下书本能不能按照书本自身的标准解释循序渐进地讲解问题.不要一上来就各种简化版、阉割版. 对待新人太不友好了.
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.