`
dingran
  • 浏览: 376256 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

代码大全第二版 第十五章 不常见的控制结构

 
阅读更多

代码大全第二版 第十五章 不常见的控制结构

 

特殊的控制结构,内容包括返回、递归和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的问题纠结的话,就翻回头看看这节内容吧。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

    代码大全第二版 中文版(1-20章)

    《代码大全第二版》中文版是一部深受程序员喜爱的经典著作,由Steve McConnell撰写,全面涵盖了软件开发过程中的编码实践和设计原则。此书分为20个章节,由于文件大小的限制,这里只包含了前20章的电子版,分为四个...

    疯狂Java讲义(第二版)源代码

    例如,"05"可能代表第五章的内容,该章可能涵盖了基础语法、数据类型、控制结构等;"07"可能是第七章,可能涉及类和对象的创建,封装、继承和多态等面向对象编程的核心概念。 "13"和"14"可能涉及更高级的主题,如...

    Python核心编程第二版书上代码

    《Python核心编程第二版》是Python编程领域里一本经典的教程,由Wesley Chun撰写,深入浅出地介绍了Python语言的各个方面。这本书包含了丰富的实例程序,旨在帮助读者掌握Python编程的基础和高级技巧。通过分析书中...

    python核心编程第二版第8章习题答案.pdf

    "Python核心编程第二版第8章习题答案" 本章主要包括了Python语言的基本语句、控制结构、循环语句、range函数、素数判断、约数计算、素因子分解、完全数等知识点。 1. 条件语句 条件语句是Python语言中的一种基本...

    Java语言程序设计教材代码(第二版)

    《Java语言程序设计教材代码(第二版)》是一本深入探讨Java编程的教育资源,它包含了丰富的实例和练习,旨在帮助学习者掌握Java编程的核心概念和技术。这个压缩包文件包含了多个章节的源代码,分别是chapter01到...

    代码大全(英文第二版)

    ### 《代码大全(英文第二版)》关键知识点解析 #### 一、书籍概述 - **作者**: Steve McConnell,一位著名的IT畅销书作家。 - **版本**: 第二版并非简单的修订增补,而是全面重写了内容,加入了大量与时俱进的新...

    谭浩强版C程序设计(第三版) 第五章到第十三章答案

    综上所述,第五章至第十三章覆盖了C语言的基础到进阶内容,通过解答《谭浩强版C程序设计(第三版)》的课后习题,读者可以系统地掌握C语言的核心技能,为后续的软件开发打下坚实基础。提供的“C答案.doc”文档应该...

    Unity3D游戏开发 第二版

    《Unity3D游戏开发 第二版》是一本深入讲解Unity3D引擎的权威教程,针对游戏开发者和爱好者提供了全面而详尽的知识体系。随着游戏行业的快速发展,Unity3D因其强大的功能、易用性和跨平台特性,已成为全球最受欢迎的...

    Head First HTML与CSS 第二版 源码打包

    《Head First HTML与CSS》是学习网页制作的经典教材,第二版更是对原有的内容进行了更新和完善。这个源码打包包含了书中各个章节的实例代码,旨在帮助读者更直观地理解和实践HTML和CSS的基础及进阶概念。以下是对每...

    C#入门经典第七版的源代码

    第十三章至第十五章,可能会讲解面向对象编程的基础,包括类、对象、封装、继承和多态。C#是一种面向对象的语言,理解这些概念对于构建复杂的软件系统至关重要。 第十六章至第十八章,可能涵盖了异常处理和错误处理...

    《程序设计语言:实践之路(第二版)》第15章 代码改进(英文)

    在前一章节中我们讨论了如何生成正确但可能效率不高的代码,存在许多冗余计算以及对现代微处理器寄存器、多个功能单元和缓存的低效利用。因此,本章节将深入研究代码改进的技术,主要关注于如何提高代码执行速度,...

    《Java程序设计实用教程(第二版)》例题及上机模板源码

    15. **第十五章**:可能覆盖Java的高级话题,如注解(Annotation)、Lambda表达式和流(Stream)API,这些都是Java 8及以后版本的重要特性。 每个章节的源码提供了实例化的学习材料,读者可以通过阅读和运行这些代码,...

    Oracle数据库实用教程(第二版)附源代码

    Oracle数据库实用教程(第二版)是一本针对Oracle数据库学习者的宝贵资源,由唐远新编著,包含了丰富的实践案例和源代码,旨在帮助读者深入理解并掌握Oracle数据库系统的核心概念和技术。这本书分为12个章节,涵盖了...

    Python Cookbook 第二版 完整示例代码

    《Python Cookbook》第二版是Python编程领域的一本经典著作,由David Beazley和Brian K. Jones合著,它提供了一系列实用的代码片段和解决方案,涵盖了Python编程中的各种常见问题和高级技巧。这本书旨在帮助Python...

    C语言程序设计现代方法第2版全部课后习题参考答案.pdf

    第二章主要讨论C语言的基础,包括数据类型、变量、常量、运算符和表达式。习题涵盖了如何声明和使用整型、浮点型、字符型等数据类型,以及理解不同运算符的优先级和结合性。此外,还涉及到了类型转换和表达式的求值...

    疯狂Android讲义(第2版)源代码 第6章~第9章

    第15章、传感器应用开发 15.2、Android的常用传感器:方向传感器Orientation; 磁场传感器Magnetic Field; 温度传感器Temperature; 光传感器Light; 压力传感器Pressure; 第16章、GPS应用开发 16.1、支持GPS的...

    Hadoop权威指南 第二版(中文版)

    第15章 开源工具Sqoop  获取Sqoop  一个导入的例子  生成代码  其他序列化系统  深入了解数据库导入  导入控制  导入和一致性  直接模式导入  使用导入的数据  导入的数据与Hive  导入大对象  执行导出 ...

    程序员编程艺术第一~二十七章集锦与总结(教你如何编程)by_July-带书签目录超清文字版

    第十一章至第十五章可能深入探讨了算法,包括排序和搜索算法。排序算法如冒泡排序、快速排序、归并排序等,搜索算法如线性搜索、二分搜索等。这些算法是程序员解决问题的常用工具,理解和掌握它们能提升解决问题的...

Global site tag (gtag.js) - Google Analytics