摘出本章比较感兴趣的一部分,首先是关于递归的简述。
递归有两个基本法则:
1.
基准情形:不用递归就能求解
2.
不断推进:对于需要用递归求解的情形,递归调用必须朝着基准情形推进。
下面列举一些例子。
例1 无终止的递归
public static int bad(int n){
if(n==0)
return 0;
else
return bad(n/3+1)+n-1;
}
在这个例子中,bad(1)会反复求bad(1),同样bad(2)也是。将陷入死循环,知道jvm奔溃。
例2 打印输出正整数
设有一个正整数n并希望将其打印。而仅有的IO只允许处理单个数字并输出(printDigit)。分析:要打印76321,首先打印出7632,再打出1。而打印出1只需printDigit(n%10)就可以。打印7632可以用print(76321/10)。
public static void print(long n){
if(n>=10)
print(n/10);
printDigit(n%10);
}
不过这个例子并不是很高效,因为mod是非常耗时的,n%10=n-(n/10)*10。
因此引出递归的第三个法则:
3.
设计法则:假设所有的递归调用都能运行。
当编写递归程序时,要牢记其第四条基本法则:
4.
合成效益法则:在求解一个问题的同一实例时,切勿在不同的递归调用中做重复性工作。
因此,使用递归来计算斐波那契之类的简单数学函数值并不合适。
分享到:
相关推荐
《算法引论:一种创造性方法》是一本深入探讨算法设计与分析的经典著作。这本书的核心目标是教会读者如何创造性地思考和构建算法,从而解决实际问题。算法是计算机科学的基石,理解和掌握算法对于任何IT从业者来说都...
《算法引论》是一本深入探讨算法理论与实践的书籍,它涵盖了计算机科学中的核心算法,为学习者提供了丰富的知识和理解。算法是计算机科学的灵魂,是解决复杂问题的关键工具,而《算法引论》正是引导读者步入这个领域...
算法分析与及设计教程习题解答 第 1 章 算法引论 第 2 章 递归算法与分治算法 第 3 章 贪心算法 第 4 章 动态规划算法 第 5 章 回溯算法 第6章 随机化算法 第7章 图论与网络流问题
王宪均的《数理逻辑引论》是一本系统介绍数理逻辑基础理论的经典著作。作为读者,我们可以通过这部作品来深入理解数理逻辑的各个方面,尤其是书中对独立性证明的论述。 数理逻辑是数学的一个分支,涉及形式语言、...
《算法引论》是一本广泛认可的算法学习入门教材,旨在为初学者提供全面而基础的算法知识。这本书涵盖了各种核心算法,旨在帮助读者理解和掌握解决问题的基本策略,并具备实际编程实现的能力。以下是对《算法引论》中...
《组合数学引论》是孙淑玲和许胤龙教授共同编著的一部经典教材,主要面向对中国科学技术大学的学生及广大对组合数学有兴趣的学习者。该书深入浅出地介绍了组合数学的基础理论和方法,是一本系统性、综合性较强的教材...
- 图灵机则用于理论研究、算法设计等领域,是现代计算机科学的基础之一。 **2. NFA识别语言补的封闭性** - **非确定有限自动机(NFA)**:允许从一个状态通过空符号ε转换到另一个状态,也可以从一个状态通过同一...
在Udi Manber的算法引论中,第四章深入探讨了如何设计高效的数据结构来支持一系列关键操作,特别是针对数组的操作,如添加、部分求和以及扩展至支持插入和删除功能。本章节通过分析一个具体的问题实例,即实现一个...
第一章《算法引论》主要介绍了算法的基本概念,如算法与程序的区别。算法具有明确的输入、输出、确定性和有限性,而程序可能不满足所有这些特性。算法的实现通常需要转化为具体的编程语言,如Java,而程序设计语言的...
本书分为两大部分,分别是算法引论和递归与分治策略。 在第一章“算法引论”中,首先会介绍什么是算法,它是如何定义的,以及在计算机科学中的重要性。算法是解决问题或执行任务的精确步骤序列,是计算机程序的基础...
这是对计算机引论导引课程ppt资料 第1章:概念自动机语言 第2章:正则语言 第3章:上下文无关语言 第4章:下推自动机 第5章:图灵机 第6章:非确定性图灵机、上下文无关语言的可判定性 第7章:可判定性回顾 第8章:...
《从问题到程序——程序设计与C语言引论》是由裘宗燕编著的一本针对初学者的C语言教程。本书以实际问题为切入点,旨在帮助读者理解和掌握C语言的基本概念、语法和编程技巧,从而逐步建立起从问题分析到编写程序的...
图灵机是递归论中的一个重要概念,它定义了计算能力的边界,也就是著名的停机问题。 5. **集合论**:作为现代数学的基石,集合论定义了数学对象的基本构造。Zermelo-Fraenkel集合论(ZF)是一套公理系统,用于建立...
《算法引论》是计算机科学领域的一门基础课程,它主要探讨如何设计和分析解决特定问题的算法。算法是程序设计的核心,是解决问题的精确步骤序列。本篇内容主要介绍了算法的基本概念、重要特性和描述方法。 首先,...
计算机本科算法课程是一门深入探讨计算问题解决策略的学科,主要涵盖了六大核心主题:算法引论、递归与分治、动态规划、贪心算法、回溯法以及分支限界法。这些主题都是构建高效软件系统的基础,对于任何IT专业人员来...
计算机科学的基础之一是数字电路的布尔代数,而布尔代数正是数理逻辑的一个分支。此外,计算机程序设计语言、编译方法、人工智能、知识库和关系数据库等领域,都深受数理逻辑的影响。数理逻辑的理论在计算机科学中...