《计算机科学中的数学》学习笔记(07 递归数据类型)

本文介绍了递归定义、结构归纳法,探讨了如何处理带括号的字符串匹配、非负整数上的递归函数,如阶乘和求和,以及算术表达式的递归定义。此外,文章还提及了计算机科学中的归纳法,包括强归纳法和一般归纳法在证明递归概念中的作用。
摘要由CSDN通过智能技术生成

书本信息:

作者: [美] Eric Lehman / [美] F. Thomson Leighton / [美] Albert R. Meyer
出版社: 电子工业出版社
出品方: 博文视点
副标题: 信息与智能时代的必修课
原作名: Mathematics for Computer Science

07 递归数据类型

1、递归定义和结构归纳法

1.1 递归定义 (Recursive Definition)

递归定义是一种定义事物的方法,其中定义本身引用了正在被定义的事物。这种定义通常包括两部分:

  1. 基本情形 (Base Case): 这是不涉及递归的明确定义部分,指明属于该数据类型的某个已知基本元素。
  2. 构造情形 ( Constructor case): 这是定义中递归的部分,指明如何从已知基本元素或已构建的元素,构造新的元素。

1.2 结构归纳法 (Structural Induction)

结构归纳法是对递归定义的数据类型的性质进行证明的方法。结构归纳法的证明通常包括以下两个步骤:

  1. 证明基本情形对应的元素具有某种性质。
  2. 证明当构造情形用具有该性质的元素生成新的元素时,新的元素也具有该性质。

2、匹配带括号的字符串

书中介绍了如何按照递归数据类型的方式定义匹配字符串( matched string),并证明了它的一些性质,不再赘述

匹配字符串在计算机科学早期用于表达式解析( Expression Parsing),例如:
x + y ∗ z 2 − y + 7 x + y * z^2 - y + 7 x+yz2y+7
给这样的表达式加上括号,以确定应它的确切含义是
[ [ x + y ] ∗ z 2 − y ] + 7 [[x + y] * z^2 - y] + 7 [[x+y]z2y]+7
还是
x + [ y ∗ z 2 − [ y + 7 ] ] x + [y * z^2 - [y + 7]] x+[yz2[y+7]]
还是
[ x + [ y ∗ z 2 ] ] − [ y + 7 ] [x + [y * z^2]] - [y + 7] [x+[yz2]][y+7]
或者其他?

3、非负整数上的递归函数

非负整数ℕ的递归定义如下:

0 ∈ ℕ \\
若n ∈ ℕ,则n + 1 ∈ ℕ

3.1 ℕ上的一些标准递归函数

阶乘的递归定义:

0!::= 1 \\
当n≥0时,(n+1)! ::=(n+1)×n!

求和的递归定义:

\sum_{i=1}^{0}f(i) ::= 0 \\
当n≥0时,\sum_{i=1}^{n+1}f(i) ::= f(n+1) + \sum_{i=1}^{n}f(i)

3.2 不规范的函数定义

用递归定义方法时应当注意,方法的递归定义应当遵循数据类型的递归定义,否则的话会得到一些奇怪的函数。

书中还列举了考拉兹猜想(Collatz conjecture)阿克曼函数(Ackermann function)的例子,但是给出的阿克曼函数与我们通常看到的定义不太一样。

4、算术表达式

书中介绍了如何使用递归来定义算术表达式,并以求值和变量替换为例介绍了如何使用递归来定义方法,不再赘述。

5、计算机科学中的归纳

强归纳法和一般归纳法都可以用来证明任意定义在非负整数集上的事情,包括逐步计算过程。
结构归纳法进一步摆脱了计数的限制,为证明递归数据类型和递归计算提供了一种简单有效的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值