定义 10.1.1 · 递推
递推就是先求出较小的值,再用它们计算较大的值。
要数大的,先数小的:先算出初始值,再用递推从前面的值算出后面的值;规则更难时,就用两个状态一起列表。
在本节中,你将能够 从较小的答案一步步算出较大的答案,数出爬楼梯的方法数。
Jeff 爬一段 6 级的楼梯,每步跨 1 级或 2 级。把所有爬法都列出来太慢了。你能不列举就数出来吗?
别直接去攻第 6 级。先问一个更小的问题:到达第 1 级有几种方法?第 2 级呢?再问:登上某一级的最后一步可能从哪里出发? 这样,一个大的计数问题就变成了一串小的计数问题。
递推就是先求出较小的值,再用它们计算较大的值。
注意: 这些数正好是斐波那契数列。这是因为递推 和斐波那契数列的递推一样。但并不是每道递推题都这样。
递推题的答案常常可以用工程归纳法得到:算出前几个值,找出规律,然后相信它。(参见第 45 章中关于应试技巧的一节。)
Jeff 在爬一段 6 级的楼梯。如果他每次可以爬 1 级或 2 级,那么他有多少种不同的方法爬到顶?
分类讨论会花很长时间。不如从小处入手。Jeff 到达第 0 级(地面)有多少种方法?
Jo 每天在学校都要爬一段 6 级的楼梯。Jo 每次可以爬 1 级、2 级或 3 级。例如,Jo 可以先爬 3 级,再爬 1 级,再爬 2 级。Jo 爬这段楼梯有多少种方法?
在本节中,你将能够 在规则中途改变时,建立初始值和递推。
Mike 每步跨 2 级或 3 级,但到了第 9 级,他可以迈一级登顶。结尾多了一条特殊规则。递推会因此失效吗?
每道递推题都走同样的四步:先自己数出初始值,再根据“从哪里到达”写出递推,然后一个一个算出后面的值。 特殊规则只是改变你要把哪些格子加起来,以及在哪里加。
用递推解题分几步:
你也可以把 当作初始值:到达第 0 级一步也不用走,而这样做恰好有 1 种方法。这样可能更快,不过一开始会有点绕,所以例题里不用它。做习题时可以放心用。
初始值求多了永远没坏处。如果递推中遇到一个你不确定怎么算的值(比如 或 ),就回头再自己多数几个初始值。
Mike 在爬一段 10 级的楼梯。他很赶时间,所以大部分路程每次爬 2 级或 3 级。如果他到达了第 9 级,就可以再爬 1 级到达第 10 级。Mike 爬到楼梯顶有多少种方法?
从初始值开始。Mike 到达第 1 级有多少种方法?
在本节中,你将能够 通过插入最新的对象,或者考虑最后一个对象的情况,找出递推。
八个正方体,棱长 1 到 8,叠起来时每个正方体至多比下面那个大 2。叠法有成千上万种。有多少种是合法的?
对象不是台阶时,爬楼梯的技巧照样管用。用规模 的答案构造规模 的答案。 对于塔,把最大的正方体插入较小的塔。对于集合,就问 本身选不选。
要检验递推式,就自己数几个小的情况,看看递推给出的数是否一样。
一组 8 个正方体,对每个满足 的整数 ,都恰有一个棱长为 的正方体。要用全部 8 个正方体按以下规则搭一座塔:
设 为可以搭出的不同的塔的个数。 除以 1000 的余数是多少?
设 为用正方体 到 搭成的合法的塔的个数。 是多少?
如果一个整数集合中,任意三个连续整数里至多只有一个属于它,就称这个集合是稀疏的。 有多少个子集(包括空集)是稀疏的?
设 为 的稀疏子集的个数。自己数出 、 和 。 是多少?
对整数 的一个排列 ,如果对每个 都有 ,就称它是准递增的。例如, 和 是整数 的准递增排列,而 不是。求整数 的准递增排列的个数。
求 的排列的个数,使得对每个满足 的 ,排列的前 项中至少有一项大于 。
在本节中,你将能够 同时记录两个计数,按字符串的结尾来区分。
一条街上有 19 户人家,邮递员从不给相邻两家同时送信,也从不连续三家都不送信。可能的送信方式有多少种?
这里一个计数不够用:接下来能怎么送,取决于这种送信方式怎么结尾。所以要记两个计数: 表示以收到信结尾的方式数, 表示以没收到信结尾的方式数。两者互相递推。
很多时候,定义两个递推函数会更简单,比如 和 ,真正的答案是两者的某种组合(例如 )。
一位邮递员给 Elm 街东侧的十九户人家送信。邮递员注意到,同一天里从来没有相邻的两户都收到信,但同一天里也从来没有超过两户连续都没收到信。可能的送信方式有多少种?
设 为 户人家中最后一户收到信的送信方式数, 为最后一户没收到信的方式数。如果最后一户收到信,它前面那户必须是什么情况?
每个字母都是 A 或 B 的 10 个字母的字符串共有 个。求其中没有超过 3 个相同字母连在一起的字符串的个数。
对每个正整数 ,设 为只由字母 和 组成、长度为 的序列的个数,要求连续的 不超过三个,连续的 也不超过三个。 除以 12 的余数是多少?
在本节中,你将能够 在博弈、圆环和不断缩小的三角形问题中运用递推。
三道挑战题:一个拿砖游戏、一个涂色的圆环、一个不断缩小的三角形。每一道里都藏着一个递推。
想在一页上看到本章的所有题目?打开习题集。
这道题在书中还以 3.3.14 的编号出现。
Arjun 和 Beth 玩一个游戏:两人轮流从若干堵砖墙中的某一堵“墙”上拿走一块砖或两块相邻的砖,拿走后留下的空隙可能产生新的墙。每堵墙都只有一块砖高。例如,大小为 和 的一组墙,走一步后可以变成下面任意一种:、、、、 或 。
Arjun 先走,拿走最后一块砖的玩家获胜。对于下面哪一种初始局面,Beth 有必胜策略?
下图是一个由六个小区域组成的圆环,你要把它画在墙上。你有四种颜色的颜料,每个区域涂成一种纯色。如果相邻的两个区域不能涂相同的颜色,求涂色方法的种数。
设 是一个三个角恰好为 、 和 的三角形。对每个正整数 ,定义 为从 向直线 所作的高的垂足。类似地,定义 为从 向直线 所作的高的垂足, 为从 向直线 所作的高的垂足。使 为钝角三角形的最小正整数 是多少?