引论提到算法递归的概念,递归在很多算法中都会出现。所谓递归,当一个函数用它自己来定义的时候就称为递归。

    递归调用有两大要素:

  • 基准情况。
  • 递归调用。

    并非所有的数学递归函数都能有效地由C语言的递归模拟来实现。一般来说,递归调用并非循环逻辑,它与其它的调用在处理上没什么不同,只是递归调用将反复进行直到基准情况出现。

    递归调用有四大基本法则:

  1. 基准情况。如先前提到,一个正确的递归必须具有不需要递归就能求解出的基准情况。一个没有基准情况的数学递归是没有意义的,也不能计算出正确的解,可能会陷入死循环甚至引起程序的崩溃。
  2. 不断推进。有了基准情况,递归调用还必须有一个正确的推进方向,递归调用必须朝着基准情况推进,否则也不能求解。
  3. 设计原则。假设所有的递归都有效。
  4. 合成效益法则。在求解一个问题的同一实例时,切勿在不同的递归调用中做重复的工作,这样会白白浪费资源。

另外,引论中提到很多的数学概念,这些其实不难,在大学的数学中都已经学过并且十分熟悉了。

 

习题

1.8  2100(mod 5)是多少?

数据结构及算法分析(0)——引论的更多相关文章

  1. Java数据结构与算法分析-第一章(引论)-Java中的范型<T,E>构件

    一.为什么需要使用范型? 官方的说法是:Java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型. 泛型的本质 ...

  2. <数据结构与算法分析>读书笔记--数学知识复习

    数学知识复习是<数据结构与算法分析>的第一章引论的第二小节,之所以放在后面,是因为我对数学确实有些恐惧感.不过再怎么恐惧也是要面对的. 一.指数 基本公式: 二.对数 在计算机科学中除非有 ...

  3. <数据结构与算法分析>读书笔记--最大子序列和问题的求解

    现在我们将要叙述四个算法来求解早先提出的最大子序列和问题. 第一个算法,它只是穷举式地尝试所有的可能.for循环中的循环变量反映了Java中数组从0开始而不是从1开始这样一个事实.还有,本算法并不计算 ...

  4. <数据结构与算法分析>读书笔记--运行时间计算

    有几种方法估计一个程序的运行时间.前面的表是凭经验得到的(可以参考:<数据结构与算法分析>读书笔记--要分析的问题) 如果认为两个程序花费大致相同的时间,要确定哪个程序更快的最好方法很可能 ...

  5. [数据结构与算法分析(Mark Allen Weiss)]不相交集 @ Python

    最简单的不相交集的实现,来自MAW的<数据结构与算法分析>. 代码: class DisjSet: def __init__(self, NumSets): self.S = [0 for ...

  6. <数据结构与算法分析>读书笔记--函数对象

    关于函数对象,百度百科对它是这样定义的: 重载函数调用操作符的类,其对象常称为函数对象(function object),即它们是行为类似函数的对象.又称仿函数. 听起来确实很难懂,通过搜索我找到一篇 ...

  7. <数据结构与算法分析>读书笔记--利用Java5泛型实现泛型构件

    一.简单的泛型类和接口 当指定一个泛型类时,类的声明则包括一个或多个类型参数,这些参数被放入在类名后面的一对尖括号内. 示例一: package cn.generic.example; public ...

  8. 数据结构与算法分析:C语言描述(原书第2版 简体中文版!!!) PDF+源代码+习题答案

    转自:http://www.linuxidc.com/Linux/2014-04/99735.htm 数据结构与算法分析:C语言描述(原书第2版中文版!!!) PDF+源代码+习题答案 数据结构与算法 ...

  9. 最小正子序列(序列之和最小,同时满足和值要最小)(数据结构与算法分析——C语言描述第二章习题2.12第二问)

    #include "stdio.h" #include "stdlib.h" #define random(x) (rand()%x) void creat_a ...

随机推荐

  1. android 实现模拟按键

    android 实现模拟按键方法一 通过Runtime实现,代码如下: try { String keyCommand = "input keyevent " + KeyEvent ...

  2. Integrating JavaScript into Native Applications

    JavaScriptCore 简介 iOS7 中新加入的 JavaScriptCore.framework 可能被大多数开发人员所忽略,但是如果你之前就在项目中用过自己编译JavaScriptCore ...

  3. Pyhton 一行代码求Fibonacci第N项

    递归定义很简单,效率当然很低下,且极易超出栈空间大小. 这样做纯粹是为了体现python的语言表现力而已, 并没有任何实际意义. def fib(x): return fib(x-1) + fib(x ...

  4. NOIP2013 货车运输

    3.货车运输 (truck.cpp/c/pas) [问题描述] A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在有 q 辆货车在运输货 ...

  5. Mac java环境配置

    进入命令行 cd ~ touch .bash_profile vi .bash_profile 输入内容jdk变量配置内容: export JAVA_HOME=/Library/Java/JavaVi ...

  6. 【noip2005】篝火晚会

    题解: 首先我们要知道一个性质: 把长度为n的序列变成目标序列最多需要n个操作 证明1: 我们可以将原序列上每位上的数字向目标序列相同位置的数字连一条有向边 如: 原序列:   1 2 3 目标序列: ...

  7. 集合框架Map之entrySet方法的使用

    Map的entrySet函数的使用,取得是键和值的映射关系,Entry就是Map接口中的内部接口,类似与我们熟悉的内部类一样,内部类定义在外部类内部,可以直接访问到外部类中的成员 package cn ...

  8. 【C语言】-选择结构-if语句

    if语句:也可称条件语句,是根据所给定条件的值是真还是假决定执行不同的分支. if语句有单分支.双分支.多分支以及if语句的嵌套等多种形式. 单分支if语句: if (条件表达式) { 语句组1; } ...

  9. 使用grep要注意的地方

    [maijunjin@localhost testGrep]$ ./ #没有结果 [maijunjin@localhost testGrep]$ . #没有结果 [maijunjin@localhos ...

  10. 转载Ajax.Net--ScriptManager和UpdatePanel控件

    ScriptManager和UpdatePanel控件联合使用可以实现页面异步局部更新的效果.其中的UpdatePanel就是设置页面中异步局部更新区域,它必须依赖于ScriptManager存在,因 ...