代码大全第二版 第十五章 不常见的控制结构
特殊的控制结构,内容包括返回、递归和goto。
第一节 子程序中的多个返回式结构控制
,即VB中的End Sub,JAVA中的return;从子程序中的某处直接退出。
此种结构可以允许程序在运行时动态决定退出时机,而不必即使出错了仍要继续运行剩余代码,造成浪费。合理使用返回有
很多好处。
举例说明:
如果有一个采用条件判断的4层嵌套的用于文件读写的子程序,条件判断是为了判断文件的各种状态是否正常,一般的人都
很费力的去读这段代码,很费大脑,所以不鼓励写这么多层的嵌套。此时就可以用返回来处理。没判断一个状态,比如文件是
否存在,如果不存在就直接返回退出,如果存在就继续。逐级判断下去直到文件的真正操作。甚至可以在每一阶段加上状态变
量,以便返回状态。这样的代码看起来容易,执行起来效率也高。(详情请看具体代码的例子)
返回的注意事项是:
a.尽量减少return语句的数量,不利于把握子程序的流程控制。
第二节,递归
递归用在什么场合最合适,显然不是教科书上讲的例子:用于计算阶乘或者斐波那契数列,这样做很愚蠢。
所以开始就讲了两个例子,一个是讲进行数组排序的时候讲数组分成两段,逐级深入进去比较。第二个是一个迷宫的游戏,走
出迷宫的本质就是坐标点朝各个方向尝试,直到移动到正确的点即是出口点,游戏就成功了。用递归去尝试4个方向,无限尝试
下去总会找到出口点,这个例子不错,很容易理解代码也很清晰。如果不用递归去做,那么将非常非常复杂。
递归的使用注意事项总结:
a.一定要有停止的条件,不能无限递归下去。比如说迷宫游戏,如果这些点是已经尝试过的,就不要再尝试了,遇到出口
点就立刻终止。所以需要有变量去记住尝试过的点。
b.使用安全计数器来限制递归的次数,某些语言可以用全局变量,另外一些只能用参数传递来纪录。
c.不要在子函数间相互递归,如A调B,B调C,C调A,这样的逻辑不容易检查,一旦有改动很容易出问题,所以要避免。
d.要注意内存及栈的空间限制,尽量用new在堆开辟空间,避免由编译器在栈上分配空间,应控制子程序的变量和递归次
数避免超出。
e.作者特意强调不要用递归去计算阶乘或者斐波那契数列,这样的行为只会出现在愚蠢的教科书上面。用循环去计算阶乘
就很好。前者运行缓慢,效率低下。
第三节,goto语句。
关于goto的争论,作者详述了过程,然后总结。goto在一些情况下还是很值得使用的。
我只记住了一个好例子,如果我们在读一个操作一个文件的时候,各个阶段都可能发生错误而退出,退出前需要执行释放
资源之类的操作,那么就用goto跳出去。如果我们使用的语言中不支持goto例如java,就可以用try final来完成相同的功能。
在final里面去释放资源。但是我读Effective JAVA的时候看到说final的执行不靠谱,有些情况是不执行的,比如异常退出。那
这可就矛盾了。
如果以后遇到goto的问题纠结的话,就翻回头看看这节内容吧。
分享到:
相关推荐
《代码大全第二版》中文版是一部深受程序员喜爱的经典著作,由Steve McConnell撰写,全面涵盖了软件开发过程中的编码实践和设计原则。此书分为20个章节,由于文件大小的限制,这里只包含了前20章的电子版,分为四个...
例如,"05"可能代表第五章的内容,该章可能涵盖了基础语法、数据类型、控制结构等;"07"可能是第七章,可能涉及类和对象的创建,封装、继承和多态等面向对象编程的核心概念。 "13"和"14"可能涉及更高级的主题,如...
《Python核心编程第二版》是Python编程领域里一本经典的教程,由Wesley Chun撰写,深入浅出地介绍了Python语言的各个方面。这本书包含了丰富的实例程序,旨在帮助读者掌握Python编程的基础和高级技巧。通过分析书中...
"Python核心编程第二版第8章习题答案" 本章主要包括了Python语言的基本语句、控制结构、循环语句、range函数、素数判断、约数计算、素因子分解、完全数等知识点。 1. 条件语句 条件语句是Python语言中的一种基本...
《Java语言程序设计教材代码(第二版)》是一本深入探讨Java编程的教育资源,它包含了丰富的实例和练习,旨在帮助学习者掌握Java编程的核心概念和技术。这个压缩包文件包含了多个章节的源代码,分别是chapter01到...
### 《代码大全(英文第二版)》关键知识点解析 #### 一、书籍概述 - **作者**: Steve McConnell,一位著名的IT畅销书作家。 - **版本**: 第二版并非简单的修订增补,而是全面重写了内容,加入了大量与时俱进的新...
综上所述,第五章至第十三章覆盖了C语言的基础到进阶内容,通过解答《谭浩强版C程序设计(第三版)》的课后习题,读者可以系统地掌握C语言的核心技能,为后续的软件开发打下坚实基础。提供的“C答案.doc”文档应该...
《Unity3D游戏开发 第二版》是一本深入讲解Unity3D引擎的权威教程,针对游戏开发者和爱好者提供了全面而详尽的知识体系。随着游戏行业的快速发展,Unity3D因其强大的功能、易用性和跨平台特性,已成为全球最受欢迎的...
《Head First HTML与CSS》是学习网页制作的经典教材,第二版更是对原有的内容进行了更新和完善。这个源码打包包含了书中各个章节的实例代码,旨在帮助读者更直观地理解和实践HTML和CSS的基础及进阶概念。以下是对每...
第十三章至第十五章,可能会讲解面向对象编程的基础,包括类、对象、封装、继承和多态。C#是一种面向对象的语言,理解这些概念对于构建复杂的软件系统至关重要。 第十六章至第十八章,可能涵盖了异常处理和错误处理...
在前一章节中我们讨论了如何生成正确但可能效率不高的代码,存在许多冗余计算以及对现代微处理器寄存器、多个功能单元和缓存的低效利用。因此,本章节将深入研究代码改进的技术,主要关注于如何提高代码执行速度,...
15. **第十五章**:可能覆盖Java的高级话题,如注解(Annotation)、Lambda表达式和流(Stream)API,这些都是Java 8及以后版本的重要特性。 每个章节的源码提供了实例化的学习材料,读者可以通过阅读和运行这些代码,...
Oracle数据库实用教程(第二版)是一本针对Oracle数据库学习者的宝贵资源,由唐远新编著,包含了丰富的实践案例和源代码,旨在帮助读者深入理解并掌握Oracle数据库系统的核心概念和技术。这本书分为12个章节,涵盖了...
《Python Cookbook》第二版是Python编程领域的一本经典著作,由David Beazley和Brian K. Jones合著,它提供了一系列实用的代码片段和解决方案,涵盖了Python编程中的各种常见问题和高级技巧。这本书旨在帮助Python...
第二章主要讨论C语言的基础,包括数据类型、变量、常量、运算符和表达式。习题涵盖了如何声明和使用整型、浮点型、字符型等数据类型,以及理解不同运算符的优先级和结合性。此外,还涉及到了类型转换和表达式的求值...
第15章、传感器应用开发 15.2、Android的常用传感器:方向传感器Orientation; 磁场传感器Magnetic Field; 温度传感器Temperature; 光传感器Light; 压力传感器Pressure; 第16章、GPS应用开发 16.1、支持GPS的...
第15章 开源工具Sqoop 获取Sqoop 一个导入的例子 生成代码 其他序列化系统 深入了解数据库导入 导入控制 导入和一致性 直接模式导入 使用导入的数据 导入的数据与Hive 导入大对象 执行导出 ...
第十一章至第十五章可能深入探讨了算法,包括排序和搜索算法。排序算法如冒泡排序、快速排序、归并排序等,搜索算法如线性搜索、二分搜索等。这些算法是程序员解决问题的常用工具,理解和掌握它们能提升解决问题的...