数学归纳法原理(本科论文)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录
中文摘要
英文摘要
1 引言 (1)
2 数学归纳法原理 (1)
2.1 良序原理 (1)
2.2 数学归纳法 (2)
2.3 第二数学归纳法 (3)
2.4 数学归纳法的有效性 (4)
3 数学归纳法应用举例 (4)
3.1 数学归纳法在解题和证明中的一些应用 (4)
3.2 数学归纳法在递归定义上的应用 (10)
3.3 数学归纳法在递归算法上的应用 (13)
参考文献 (17)
数学归纳法原理及其应用举例
摘要:数学归纳法原理是一种有效的证明方法.本文将介绍数学归纳法及其等价形式,并证明为什么它们是有效的.特别地,我们将用大量各种不同类型的例子来说明其应用。

这些例子有的来自于集合论,数论,有的来自于计算机科学等.
关键词:良序原理,数学归纳法,第二数学归纳法,递归算法.
Abstract: The principles of mathematical induction provide effective ways for valid arguments in mathematical proofs. This thesis will present these principles and their other equivalent forms, and will show why they work and particularly will show how they work by examples from diversified settings or areas of mathematics, e.g. set theory, number theory, computer algorithm, and so on.
Key words:The well-ordering principle, the first principle of mathematical induction, the second principle of mathematical induction, recursive algorithm.
1 引言
首先使用数学归纳法的是意大利数学家和工程师马奥罗修勒斯(Francesco Maurocyulus ,1494-1575),他在1575年的著作《算术》(Arithmetica )中,用数学归纳法证明了前n 个正奇数之和是2n .帕斯卡(Blaise Pascal,1623-1662)在他关于算术三角形(现在称为帕斯卡三角形)的著作中使用了归纳法.在他1653年的著作《论算术三角形》(Traite du triangle arithmetique )中,在证明用来定义他的三角形的基本性质时,帕斯卡清晰地解释了归纳法.德摩根在1838年的一篇关于证明方法的论文中,把这个原理命名为“数学归纳法”.
前n 个正奇数之和的公式是什么?对1n =,2,3,4,5来说前n 个正奇数之和是
11=,134+=,1359++=, 135716+++=,1357925++++=
根据这些值,有理由猜测前n 个正奇数之和是2n .假如事实上这个猜测是正确的,我们就需要一种方法来证明这个猜测是正确的.数学归纳法是证明这种类型的断言的极为重要的证明技术.
2 数学归纳法原理
2.1 良序原理
所有数学都始于计数,计数就是把要计数的对象集合与几个起始自然数(或计算值):1,2,3,4,5...一一对应的过程.我们用N 表示自然数这个无限集合,这里值得注意的是关于N 的定义并未达成共识,有些数学家把0也归入N .但这两种不同定义并不会引起太大的冲突,哪一种使用方便即可选择哪一种.
自然数N 的一个基本性质是良序性,下面将对自然数的良序性进行形式化的论述,并且把它作为一个关于N 的公理.对于任何系统,公理是无需证明即为真的命题.为了对一个系统(这里指自然数)进行推理,首先需要对该系统做一些假设.尽管这些基本的
假设常常不容易一眼就看出,但它应该是“合理的”和“显而易见为真的”.
良序原理:自然数集N 的每个非空子集都有一个最小元素.
显而易见,自然数N 的任何子集都可以通过列出实际元素的方式给定,即使对于不易直接定义的集合,该定理依然有效.例如,当x 和y 可取任意整数时,考虑1228x y +所表示的所有自然数集合.从定义看该集合的范围并不明显,但是根据良序原理,由于该集合非空(注意这很重要),集合中必有一个通过该方式表示的最小自然数.(当然,求具体的最小自然数的值是另外一回事.注意良序原理保证有一个最小数存在,但绝对没说如何去计算它.)
例2.1.1 用良序原理证明算法的正确性.整除算法说:若a 是整数而且d 是正整数,则存在唯一的整数q 和r 满足0r d ≤<和a dq r =+.
证明 设S 是形如a dq -的非负整数的集合,其中q 是整数.这个集合非空,因为dq -可以任意大(取q 是绝对值很大的负整数).根据良序性,S 有最小元0r a dq =-.
整数r 非负而且r d <.若不是这样,则S 里存在更小的非负整数,即0(1)a d q -+.为了看出这一点,假设r d ≥.因为0a dq r =+,所以00(1)0a d q a dq d r d -+=--=-≥.因此,存在满足0r d ≤<的整数r 和q .证明q 和r 都是唯一的,此处略.
良序原理允许我们证明最有效的一个证明方法,即数学归纳法定理. 2.2 数学归纳法 对任何正整数n ,
21
5811...(32)(37)2
n n n +++++=+
因为存在无限多个正整数,所以,在证明这个断言时,不能通过对n 的每个值逐一验证等式是否成立.有一种规范的方法可用来证明命题对所有的正整数都成立,这种方法称为数学归纳法原理.
定理 2.2.1 假设要证明的命题能写成0()n n P n ∀≥,其中0n 是某个固定整数,即:
假设希望证明对所有整数0n n ≥都有()P n 为真,那么如下方法可以说明如何做到这一点.假设(a )0()P n 为真,和(b)如果对任一0k n ≥只要()P k 为真,那么(1)P k +也一定为真.于是对所有0n n ≥,()P n 为真.这种方法称作数学归纳法原理.
因此,用数学归纳法原理证明命题:0()n n P n ∀≥为真,必须首先用直接法证明第一个命题0()P n 为真,称其为归纳法的基础步骤,并且通常来讲该步是非常容易的.然后必须证明对0n n ≥的任何选择,()(1)P k P k ⇒+是一个重言式.因为一个蕴涵为假的惟一情况是如果前提为真而结论为假,做这一步通常是证明如果()P k 为真,那么(1)P k +也一定为真.注意,它同假设对某个k 值()P k 为真不一样.这一步称作归纳步骤,并且某些工作通常要求证明蕴涵恒为真.
2.3 第二数学归纳法
与上述数学归纳法略有不同的形式在某些证明当中更易于使用.第二数学归纳法或强归纳法中,其归纳步骤是证明
000()(()(1)(2)...())(1)k P n P n P n P k P k ∀∧+∧+∧∧⇒+
是一个重言式.同前面一样,需要检验的唯一情况是如果每个()P j ,0,...,j n k =为真,那么(1)P k +为真.强归纳法与数学归纳法是等价的,在一个证明中使用哪一个取决于方便性.
例 2.3.1 证明:每个正整数1n >能惟一地写成12
12
...s a a a s p p p ,其中i p 是素数且12...s p p p <<<.
证明(用强归纳法)
基础步骤 这里02n =,显然(2)P 为真,因为2是素数.
归纳步骤 使用(2)P ,(3)P ,…,()P k 证明(1)P k +:1k +能惟一地写成12
12
...s a a a s p p p ,其中i p 是素数且12...s p p p <<<.需要考虑两种情况:若1k +是一个素数,则(1)P k +为真.若1k +不是素数,则1k lm +=,2l k ≤≤,2m k ≤≤.利用()P l 和()P m ,得1k +=lm =
121212
121212.........s u s b c a b b c c a a s u s q q q r r r p p p =,其中每个i j p q =或k r ,12...s p p p <<<.若i k j p r q ==,
则i j k a b c =+,否则i j p q =且i j a b =或者i k p r =且i k a c =.因为l 和m 的因子分解是惟一的,所以1k +的因子分解也是唯一的.
2.4数学归纳法的有效性
为什么数学归纳法是一种有效的证明方法?原因在于良序原理.假定知道(1)P 为真,而且对所有正整数n 来说命题()(1)P n P n →+为真.为了证明对所有正整数来说()P n 都为真,假定至少存在一个()P n 为假的正整数.那么使()P n 为假的正整数S 非空.因此,根据良序性,S 有一个最小元,把它表示成k .可以知道k 不是1,因为(1)P 为真.因为k 是正的而且大于1,所以1k -是一个正整数.另外,因为1k -小于k ,它不属于S ,所以
(1)P k -必然为真.因为蕴涵式(1)()P k P k -→也为真,所以实际情况必然是()P k 为真.
这与对k 的选择相矛盾.因此对每个正整数n 来说()P n 必然为真.
3 数学归纳法应用举例
3.1 数学归纳法在解题和证明中的一些应用
定理3.1.1 每一个大于1的整数要么是素数,要么是若干素数的乘积.
证明:设n 为大于1的整数.证明将采用强数学归纳法原理,对n 作归纳.因为2是一个素数,所以命题对2n =是正确的.
假设对某个整数1k >,当2,3,...,n k =时,命题为真.下面要证明1k +要么是素数,要么是若干素数的乘积.如果1k +是素数,那么证明已经完成.所以,假设1k +不是素数.于是,存在一个既不是1也不是1k +的正整数p ,p 整除1k +.所以,
1
k q p
+=是整数,且1q ≠(否则1p k =+),1q k ≠+(否则1p =).因此,p 和q 都是2到k 之间的整数(含2和k ).所以可以对p 和q 运用归纳假设,即p 和q 不是素数就是若干素数的乘积,从而1k pq +=是若干素数的乘积.这就完成了归纳步骤,因此完成了定理的证明.
注意,定理3.1.1虽然说明了大于1的正整数不是素数就是素数的乘积,但这个定
理并不能帮助判断是两种情形中的哪一种.特别地,定理3.1.1也不能实际地找到特定的正整数的素数因子.
例3.1.1 实验室里有容积相同的量杯盛着各种不同的液体,此外还有一只容积相同的
空杯.证明:可以通过有限次混合手续,使它们成为成份相同的溶液,此外还余一个空量杯.
分析:表面上看本题与数学归纳法没有联系,但若我们引入一个整数参数(原有溶液的杯数),我们就可以考虑应用数学归纳法.
事实上,不妨设有n 杯各种不同的溶液,显然1n =时命题成.立假设n k =时命题成立,即k 杯溶液可以通过有限次混合手续,使它们成为成份相同的溶液.此外还有一个空杯,于是当再增加一杯时,我们只需把k 杯已混合好的溶液各倒
1
1
k +杯到空杯中,最后拿增加的那杯溶液去把上述1k +杯液体满,这样我们便得到1k +杯成份相同的液体,此外还有一个空杯,也就是说1n k =+时命题也成立.
上面的分析告诉我们,很多与自然数n 有关的问题都可采用数学归纳法,而一个具体的问题能否用数学归纳法,以及取什么做n ,则取决于能否递推.只要有递推的希望,就不妨一试.
例3.1.2 设1A ,2A ,3A ,…,n A 是任意n 个集合,用数学归纳法证明
11
n n
i i i i A A ==⎛⎫= ⎪⎝⎭
(这是德•摩根定律的推广形式.)设()P n 是谓词:对任意n 个集合等式成立.用数学归纳法需证明,对所有1n ≥,()P n 为真.
证明 基础步骤 (1)P 是命题11A A =,这显然成立. 归纳步骤 用()P k 去证明(1)P k +.(1)P k +的左边是
1211...n i k k i A A A A A +=⎛⎫= ⎪⎝

121(...)k k A A A A += 的结合性质
1
21(...)
k k A A A A += 两个集合的德•摩根定律
11k i k i A A +=⎛⎫= ⎪⎝⎭
用()P k
1
1
k i i A +==
(1)P k +的右边
因此,蕴涵()(1)P k P k ⇒+的一个重言式,由数学归纳法原理可知对所有1n ≥,()P n 为真.
例3.1.3 本例将要证明:对于任何正整数n ,如果从22n n ⨯的棋盘(每行和每列有
2n 个方格)中移去任何一个方格,则剩下的方格可以用若干个L 形构件覆盖,每个L 形构件覆盖3个方格,如图1所示.
图一
证明 如图2所示,每个1122⨯的棋盘移去一个方格后,可被一个L 型构件覆盖.因此,结论对于1n =是正确的.
现在假设对于某个正整数k 结论是正确的,即每个22k k ⨯的棋盘移去一个方格后,可用若干个L 形构件覆盖.下面要证明:任何一个1122k k ++⨯的棋盘移去一个方格后,可用L 形构件覆盖.如果1122k k ++⨯的棋盘在横向和纵向上都平分为两部分,就得到4个
22k k ⨯的棋盘.其中的一个22k k ⨯被移去了一个方格,而另外3个是完整的,如图所示.
从每个完整的22k k ⨯的棋盘中移去那个位于原1122k k ++⨯的棋盘中心位置的方格,如图3所示.由归纳假设知道,图4所示的所有4个移去了一个方格的22k k ⨯的棋盘都可以被L 形构件覆盖.因此,再用一个L 形构件覆盖原1122k k ++⨯的棋盘中央的3个方格,就可以用L 形构件覆盖原来的移去了一个方格的
1122k k ++⨯的棋盘.这就证明了1k +的情况.根据数学归纳法原理,对每一个正整数
n ,任何去掉了一个方格的22n n ⨯的棋盘都可以用L 形构件覆盖.
图二
图三 图四
定理 3.1.2 设S 是有n 个元素的集合,其中n 是非负整数.如果r 是一个整数,
0r n ≤≤,那么恰好含有r 个元素的S 的子集的数目是
!
!()!
n r n r -.
证明 证明将采用归纳法,对n 作归纳,并从0n =开始.
如果0n =,那么S 是空集,并且r 必定是0.而φ有且仅有一个含0个元素的子集,即它本身,而且,因为0!1=,所以
!0!
1!()!0!0!
n r n r ==-.
所以公式对0n =是成立的.
现在假设公式对某个整数0k ≥是成立的.设S 是含有1k +个元素的集合,比如说
121{,,...,,}k k S a a a a +=.现在要统计S 恰好含有r 个元素的子集的数目,这里01r k ≤≤+.
显然,含有0个元素的S 的子集只有Φ.类似地,也只有一个S 的子集含有1k +个元素,即S 本身.对这两种情况,公式都给出了正确的值,因为
(1)!10!(10)!k k +=+-,(1)!
1(1)![1(1)]!
k k k k +=++-+.
设R 是S 的恰好包含r 个元素的任意子集,这里1r k ≤≤.有两种情况需要考虑. 第一种情况:1k a R +∉.这时R 是12{,,...,}k a a a 的有r 个元素的子集.根据归纳假设,这样的子集有
!
!()!
k r k r -个.
第二种情况:1k a R +∈.在这种情况下,如果从R 中拿掉1k a +,就得到12{,,...,}k a a a 的含有1r -个元素的子集.根据归纳假设,这样的子集有
!
(1)![(1)]!
k r k r ---个.
把这两种情况合起来,看到S 共有!!
!()!(1)!(1)!
k k r k r r k r +---+个含有r 个元素的子
集.而这个值等于
!(1)!!()!(1)(1)!(1)!k k r k r
r k r k r r r k r -++--+--+
!(1)!!(1)!!(1)!k k r k r
r k r r k r -+=
+-+-+
!(1)
!(1)!k k r r r k r -++=
-+
(1)!
!(1)!
k r k r +=
-+
在公式中,用1k +替换n 就得到这个数,因此公式对于1n k =+是正确的.
所以,根据数学归纳法原理,公式对所有的非负整数n 都是正确的.
例3.1.4 证明:可以仅用4分和5分的邮票来组成等于或超过12分的每种邮资. 证明 将要用数学归纳法原理来证明这个结果.然后给出用数学归纳法第二原理的证明.设()P n 是命题:可以用4分和5分的邮票来组成n 分邮资.
首先使用数学归纳法原理.
基础步骤:可以用3个4分邮票来组成12分邮资.
归纳步骤:假定()P n 为真,所以可以用4分和5分邮票来组成n 分邮资.若至少用了一个4分邮票,则用一个5分邮票代替它,就组成1n +分邮资.若没有用任何4分邮票,则仅用了5分的邮票来组成n 分邮资.因为12n ≥,所以至少用了3个5分邮票.所以4个4分邮票来代替3个5分邮票,就组成了1n +分邮资.这完成了归纳步骤以及根据数学归纳法原理的证明.
其次,将要使用数学归纳法的第二原理.将要证明可以组成12,13,14和15分邮资,然后证明如何对15n ≥来说从3n -分邮资得出1n +分邮资.
基础步骤:可以分别用3个4分邮票,2个4分邮票和1个5分邮票,1个4分邮票和2个5分邮票,以及3个5分邮票,来组成12,13,14和15分邮资.
归纳步骤:设15n ≥.假定可以组成k 分邮资,其中12k n ≤≤.为了组成1n +分邮资,用组成3n -分邮资的邮票加上一个4分邮票.这完成了归纳步骤以及根据数学归纳法第二原理的证明.
注意 例3.1.4说明如何让数学归纳法第二原理适应于处理某些情形,其中仅对充分大的n 值来说归纳步骤才是有效的.具体说来为了证明对,1,2,...n k k k =++来说()P n 为真,其中k 是整数,首先证明(),(1),(2),...,()P k P k P k P l ++都为真(基础步骤),然后证明对每个整数1n ≥来说[()(1)(2)...()](1)P k P k P k P n P n ∧+∧+∧∧→+为真(归纳步骤).例如,例3.1.4解答里的第二个证明的基础步骤证明(12),(13),(14)P P P 和(15)P 都为真.需要分别地证明这些情形,因为归纳步骤证明[(12)(13)...()](1)P P P n P n ∧∧∧→+,
它仅当15n ≥时才成立.
在下面将要讨论数学归纳法的另外两个重要应用.第一个应用涉及到定义序列而不给出明确的项公式.第二个应用涉及到证明计算机程序是正确的.
3.2 数学归纳法在递归定义上的应用
3.2.1 引言
定义3.2.1 有时难以用明确的方式来定义一个对象.不过,用这个对象来定义它自身,这也许是容易的.这种过程称为递归.
可以用递归来定义序列、函数和集合.例如,对0,1,2,...n =来说用2n n a =来给出2的幂的序列.不过通过给出这个序列的第一项,即01a =,以及从该序列前面一项来求当前项的规则,即对0,1,2,...n =来说12n n a a +=,也可以定义这个序列.
3.2.2 递归地定义函数
定义3.2.2 为了定义以非负整数集合作为其定义域的函数,就要
(1)规定这个函数在0下处的值.
(2)给出从较小的整数处的值来求出当前的值的规则.
这样的定义称为递归定义或归纳定义.
许多函数都可以利用它们的递归定义来研究.阶乘函数就是一个这样的例子.
例3.2.1 给出阶乘函数()!F n n =的归纳定义.
解 可以通过规定阶乘函数的初值,即(0)1F =,并且给出从()F n 求出(1)F n +的规则,来定义这个函数.要得出这个结果,注意通过乘以1n +就从!n 计算出(1)!n +.因此,所需要的规则是(1)(1)()F n n F n +=+.
为了从在例7中求出的递归定义来确定阶乘函数的一个值,比如(5)5!F =,有必要多次使用说明如何用()F n 表示(1)F n +的规则:
(5)5(4)54(3)543(2)5432(1)F F F F F ==⋅=⋅⋅=⋅⋅⋅
54321(0)54321120F =⋅⋅⋅⋅=⋅⋅⋅⋅=
一旦(0)F 是出现的唯一的函数值,就不需要任何更多的归约.剩下来要做的唯一事情是把(0)F 的值插入到公式里.
递归地定义的函数是严格定义的.这是数学归纳法原理的一个后果.
例3.2.2 给出0n
k k a =∑的递归定义.
解 这个递归定义的第一步是 0
00k k a a ==∑,
第二步是 1100n n
k k n k k a a a ++===+∑∑.
在函数的某些递归定义里,规定了函数在前k 个正整数处的值,而且给出了从一个较大的整数之前的部分或全部k 个整数处的函数值来确定在该整数处的函数值的规则.从数学归纳法第二原理可以得出结论说这样的定义产生严格定义的函数.
例3.2.3 斐波那契数012,,,...f f f 是用等式00f =,11f =,以及对2,3,4,...n =来说 12n n n f f f --=+
来定义的.斐波那契数2f ,3f ,4f ,5f ,6f 是什么?
解 因为这个定义的第一部分说00f =和11f =,所以从这个定义的第二部分得出
210101f f f =+=+=
321112f f f =+=+=
432213f f f =+=+=
543325f f f =+=+=
654538f f f =+=+=
可以用斐波那契数的递归定义来证明这些数的许多性质.在下一个例子里给出一个这样的性质.
例3.2.4 证明:每当3n ≥时就有2n n f α->
,其中(1/2α=.
证明 可以用数学归纳法第二原理来证明这个不等式.设()P n 是命题:2n n f α->.想要证明每当n 是大于或等于3的整数时就有()P n 为真.
首先,注意到
32f α<=,24(3/23f α=<=
所以(3)P 和(4)P 都为真.现在假定()P k 为真,即对所有满足3k n ≤≤的整数k 来说有2k k f α->,其中4n ≥.必须证明(1)P n +为真,即11n n f α-+>.因为α是210x x --=的解(二次方程求根公式说明这一点),所以得出21αα=+.因此,
12333323(1)1n n n n n n n αααααααααα-------=⋅=+⋅=⋅+⋅=+
根据归纳假设,若5n ≥,则得出
31n n f α-->,2n n f α->
因此就有
23111n n n n n n f f f ααα---+-=+>+=
由此得出(1)P n +为真,证毕.
注意 归纳步骤证明了每当4n ≥时,从对3k n ≤≤来说()P k 为真的假定就得出(1)P n +.因此,归纳步骤没有证明(3)(4)P P →.所以,不得不单独证明(4)P 为真.
3.2.3 递归地定义集合
递归定义常常用来定义集合.当这样做时,给出初始的一些元素.然后给出用来从已知属于集合的元素来构造集合的其他元素的规则.以这种方式描述的集合是严格定义的,用它们的递归定义可以证明关于它们的定理.下面是集合的递归定义的一些例子.
例3.2.5 设S 是用
3S ∈ ;
若x S ∈且y S ∈,则x y S +∈
来递归地定义的.证明:S 是被3整除的正整数集合.(注意在这个定义里隐含着假定:
所有属于S 的东西都是用S 的递归定义里的两个命题来生成的.)
证明 设A 是被3整除的所有正整数的集合.为了证明A S =,必须证明A 是S 的子集而且S 是A 的子集.为了证明A 是S 的子集,必须证明被3整除的每个正整数都属于S .将要用数学归纳法来证明它.
设()P n 是命题:3n 属于S .基础步骤成立,因为根据S 的递归定义的第一部分,313⨯=是属于S 的.为了证明归纳步骤,假定()P n 为真,即3n 属于S .因为3n 属于S 而且因为3属于S ,所以从S 的递归定义的第二部分得出333(1)n n +=+也属于S .
为了证明S 是A 的子集,使用S 的递归定义.首先,该定义的基础步骤规定3属于S .因为331=⨯,所以所有在这个步骤里被规定属于S 的元素都被3整除.为了完成这个证明,必须证明所有用该递归定义的第二部分所生成的属于S 的元素都属于A .这包括证明每当x 和y 都是S 中的元素并且假定它们都属于A 时,就有x y +属于A .现在若x 和y 都属于A ,则可以得出3|x 和3|y .由整数的可数性的性质,得出3|()x y +,证毕.
在上例里集合的递归定义是典型的.首先,给出一组初始元素.其次,给出从已知属于集合的元素来生成新元素的规则.在定义里隐含着只有在初始元素中列出的元素,或者可以用构造新元素的规则来生成的那些元素才属于这个集合.
3.3 数学归纳法在递归算法上的应用
3.3.1 引言
有时可以把带有具体的一组输入的问题的解归约到带更小的一组输入的相同问题的解.例如,求两个正整数a 和b 的最大公因子的问题,其中b a >,就可以归约到求一对更小的整数(即mod b a 和a )的最大公因子的问题,因为gcd(mod ,)gcd(,)b a a a b =.当可以实现这样的归约时,就可以用一系列归约来求出原问题的解,直到把问题归约到解是已知的某种情形为止.例如,对求最大公因子来说,归约持续到两个数中较小的一个为零,因为当0a >时,gcd(,0)a a =.
定义3.3.1 若一个算法通过把问题归约到带更小的输入的相同问题的实例,来解决原来的问题,则这个算法称为递归的.
例3.3.1 把线性搜索算法表达成递归过程.
解 为了在搜索序列12,,...,n a a a 里搜索x ,在算法的第i 步比较x 与i a .若x 等于i a ,则i 是x 的位置.否则,对x 的搜索就归约到在少了一个元素的序列(即序列1,...,i n a a +)里的搜索.现在给出递归过程.
设(,,)search i j x 是在序列1,,...,i i j a a a +里搜索x 的过程.过程的输入包括三元组
(1,,)n x .若剩余序列的第一项是x ,
或者若序列只有一项并且它不是x ,则过程在这一步终止.若x 不是这一项而且存在其他的项,则执行同样的过程,但是搜索序列减少一项,它是通过删除搜索序列的第一项而获得的.
递归顺序搜索算法
procedure search (,,)i j x
if i a x = then
Location:=i
else if i j = then
location:=0
else
search (1,,)i j x +
3.3.2 递归与迭代
递归定义把在正整数处的函数值表达成在更小的整数处的函数值.这意味着可以设计递归算法来求出递归地定义的函数在正整数处的值.
例3.3.2 下面给出阶乘的递归算法.
阶乘的递归过程
procedure factorial(n :正整数)
if 1n = then
factorial(n ):=1
else
factorial(n ):=n *factorial(1n -)
存在另外一种方式,从阶乘函数的递归定义求它在整数处的值.代替连续地把计算归纳到在更小的整数处来求函数的值,可以从在1处的函数值开始,连续地应用递归定义来求出在更大的整数处的函数值.这样的过程称为迭代.换句话说,为了用迭代过程求出!n ,从1(即在1处的阶乘函数值)开始,连续地乘以每个小于或等于n 的正整数.
对递归地定义的序列求值的迭代方法,比起使用递归的过程来,常常要求较少量的计算机(除非使用专门的递归机器).用求第n 个斐波那契数的迭代的递归过程来说这一点.首先给出递归过程.
斐波那契数的递归算法
procedure fibonacci(n :非负整数)
if 0n =then fibonacci(0):=0
else if 1n =then fibonacci(1):=1
else fibonacci(n ):= fibonacci(1n -)+fibonacci(2n -)
当使用递归算法求n f 时,首先把n f 表示成12n n f f --+.然后把这两个斐波那契数都换成两个前面的斐波那契数之和.当0f 或1f 出现时,就直接换成
它的值.
注意,在递归的每个阶段,直到获得1f 或0f 为止,
需要求值的斐波那契数的个数都一直翻倍.例如,当使用
这个递归算法求出4f 时,就必须完成图五里树形图所说明
的全部计算机.这个树包括用4f 标记的根,以及从根到用 图五
两个斐波那契数3f 和2f 标记的顶点的分支,它们出现在4f 的计算的归约里.每个后续的
归约都产生树里的两个分支.当遇到0f 和1f 时,这种分支结束.
现在考虑用下面的迭代过程来求出n f 所需要的计算量.
计算斐波那契数的迭代算法
procedure iterative fibonacci(n :非负整数)
if 0n = then y :=0
else
begin
x :=0
y :=1
for i :=1 to 1n -
begin
z :=x y +
x :=y
y :=z
end
end
{y 是第n 个斐波那契数}
这个过程把x 初始化成00f =,把y 初始化成11f =.当经过循环时,把x 和y 之和赋给辅助变量z .然后把x 赋成y 的值,而把y 赋成辅助变量z 的值.因此,在经过第一次循环之后得出x 等于1f 而y 等于012f f f +=.另外,在经过1n -次循环之后x 等于1n f -而且y 等于n f .当1n >时,用这个迭代方法求出n f 仅仅使用了1n -次加法.因此,这个算法比递归算法需要少得多的计算.
参考文献
[1] 华罗庚. 数学归纳法[M].北京:科学出版社,2002.
[2] 屈婉玲. 离散数学[M].北京:清华大学出版社,2005.
[3] 邓辉文. 离散数学[M].北京:清华大学出版社,2006.
[4] 邵学才. 离散数学[M].北京:清华大学出版社,2006.
[5] 魏献祝. 高等代数[M].上海:华东师范大学出版社,1990.
[6] 霍元极. 高等代数[M].北京:北京师范大学出版社,1990.
[7] 多西. 离散数学:第4版[M].北京:清华大学出版社,2005.
[8] 左孝凌. 离散数学[M].上海:上海科学技术文献出版社,1982.
[9] 约翰索鲍. 离散数学:第5版[M].北京:人民邮电出版社, 2003.
[10]费尔,克朗. 离散数学:双语版[M].北京:清华大学出版社,2005.
[11] Kenneth H.Rosen. 离散数学及其应用:原书第4版[M].北京:机械工业出版社,
2002.
[12] 科尔曼,巴斯比,罗斯. 离散数学结构:第5版翻译版[M].北京:高等教育出版
社,2005.
[13] Susanna. Discrete Mathematics with Applications:第3版[M].北京:高等
教育出版社,2005.
[14] J. R. Monk. Introduction to Set Theory[M].NewYork:McGrawHill,1969.
[15] E. Mendelson. Introduction to Mathematical Logic [M].New York:Van Nostrand
Reinhold, 1964.。

相关文档
最新文档