离散数学/递归
在本节中,我们将探讨一些数学过程,这些过程的核心是递归的基本性质。
简单来说,递归就是用自身来描述一个动作的过程。这可能听起来有点奇怪,但一旦你理解了,它就是一种表达某些概念的极其强大的方法。
让我们看一些例子,让事情更清晰。
当我们计算一个指数,比如x3时,我们将x自乘三次。如果我们有x5,我们将x自乘五次。
然而,如果我们想要指数的递归定义,我们需要用自身来定义取指数的操作。因此我们注意到,例如x4与x3 × x相同。但什么是x3?x3与x2 × x相同。我们可以继续以这种方式进行,直到x0=1。那么我们一般能说些什么呢?递归地,
- xn = x × (xn-1)
以及
- x0=1
我们需要第二个事实,因为如果我们继续使用负指数,定义将不再有意义,我们将无限地继续下去!
将问题简化为相同问题,但输入更小。例如
a power n 2 power 4 the recursion(smaller inputs) of this function is = 2.2.2.2.1 for this we declare some recursive definitions a=2 n=4 f(0)=1 f(1)=2 f(2)=2 f(3)=2 f(4)=2 for this recursion we form a formula f(n)= a.f(n-1) by putting these smaller values we get the same answer.
在数学中,我们可以创建递归函数,这些函数依赖于其先前的值来创建新的值。我们通常称这些为递推关系。
例如,我们可以有函数 :f(x)=2f(x-1),其中f(1)=1。如果我们计算一些f的值,我们会得到
- 1, 2, 4, 8, 16, ...
然而,这个数字序列对你来说应该很熟悉!这些值与函数2x相同,其中x = 0、1,依此类推。
我们所做的是找到一个非递归函数,该函数与递归函数具有相同的数值。我们称之为求解,也称为x'to sup,其值为0,依此类推。
我们将特别关注一种被称为线性的递推关系。
这是一个线性递推关系的例子
- f(x)=3f(x-1)+12f(x-2),其中f(0)=1,f(1)=1
我们通常使用an表示a(n),而不是写f(x),但这些表示法是完全可以互换的。
注意,线性递推关系应该始终有终止情况,否则我们将无法计算f(2),例如,因为如果我们没有定义f(1),它将是什么呢?当我们谈论线性递推关系时,这些终止情况被称为初始条件。
一般来说,线性递推关系的形式为
- an=A1an-1 + A2an-2 + ... + Ajan-j
- 其中f(t1)=u1,f(t2)=u2,...,f(tj)=uj作为初始条件。
数字j很重要,它被称为线性递推关系的阶。请注意,我们始终至少需要j个初始条件才能使递推关系有意义。
回顾上一节,我们看到可以找到一个非递归函数(一个解),它将取与递推关系本身相同的数值。让我们看看如何求解一些线性递推关系 - 我们可以用一种非常系统的方法来做到这一点,但我们首先需要建立几个定理。
这个定理说
- 如果f(n)和g(n)都是线性递推关系an=Aan-1+Ban-2的解,那么它们的和也是一个解。
这是真的,因为如果我们将递推关系重新排列为an-Aan-1-Ban-2=0,并且我们知道f(n)和g(n)是解,因此,在代入递推关系后,我们有
- f(n)-Af(n-1)-Bf(n-2)=0
- g(n)-Ag(n-1)-Bg(n-2)=0
如果我们将和f(n)+g(n)代入递推关系,我们将得到
- (f(n)+g(n))-A(f(n-1)+g(n-1))-B((f(n-2)+g(n-2))=0
展开后,我们有
- f(n)-Af(n-1)-Bf(n-2)+g(n)-Ag(n-1)-Bg(n-2)
但使用我们首先建立的两个事实,这与
- 0+0=0
因此,f(n)+g(n)确实是递推关系的解。
下一个定理指出
- 假设我们有一个二阶线性递推关系,an-Aan-1-Ban-2=0,并给出初始条件。
那么γrn是递推关系的解,其中r是二次方程
- x2-Ax-B=0
的解,我们称之为特征方程。
我们猜测(为什么并不重要,现在就接受它)γrn可能是一个解。我们可以证明,如果(且仅当)它解出特征方程,它就是一个解 ;
我们将γrn(r不等于零)代入递推关系中,得到
- γrn-Aγrn-1-Bγrn-2=0
然后用最右边的项γrn-2进行因式分解
- γrn-2(r2-Ar-B)=0
我们知道r不等于零,因此rn-2永远不可能为零。因此,r2-Ar-B必须为零,因此,γrn(其中r是r2-Ar-B=0的解)确实是线性递推关系的解。请注意,我们可以轻松地将这个事实推广到更高阶的线性递推关系。
这是从哪里来的?为什么它有效(除了死板的证明)?这里有一个更直观的(但数学上不那么严谨)的解释。
求解特征方程找到一个满足线性递推关系的函数,并且方便地不需要对所有n项进行求和来找到第n项。
我们需要 : 一个函数F(n),使得F(n) = A * F(n-1) + B * F(n-2)
我们求解 : x2 = A* x + B,并将其解称为r。可能有多个r值,如下面的例子所示!
我们得到 : 一个函数F(n) = rn,它满足F(n) = A * F(n-1) + B * F(n-2)
让我们检查一下:rn = A*rn-1 + B*rn-2 是否成立?将两边都除以rn-2,我们会得到r2 = A*r + B,这必须成立,因为r是x2 = A* x + B的解
为什么 γ*rn 也满足递归关系? 如果 F(n)=rn 是一个解,也就是说,rn-A*rn-1-B*rn-2=0,那么 F(n)=γrn 当然也是一个解,因为 γrn-A*γrn-1-B*γrn-2=γ(rn-A*rn-1-B*rn-2)=0。
因为我们有一个二阶递归关系,所以通解是两个解的和,这两个解对应特征方程的两个根。假设这两个根是 r 和 s。通解是 C(rn)+D(sn),其中 C 和 D 是常数。我们可以通过关系的两个初始值(必须有两个才能找到 C 和 D)来求出它们。将这些值代入通解,将得到两个方程,我们可以(希望)解出它们。
让我们通过一个例子来了解如何使用上述定理来解决线性递归关系。考察这里给出的函数 a(n)
- a(n)=a(n-1)+2a(n-2)
这个递归关系的特征方程是
- r2-r-2 = 0,如上所示,因为 A=1 且 B=2
即 (r-2)(r+1)=0,它的根为 2,-1。
所以通解是 C(2n)+D(-1)n。
为了找到这个特定情况下的 C 和 D,我们需要两个初始值,假设 a(1) = 0 且 a(2) = 2。这些值会得到一个由两个方程组成的系统
0 = C(21)+D(-1)1
2 = C(22)+D(-1)2
解这两个方程得到:C = 1/3,D = 2/3,所以解是 1/3*(2n)+2/3*(-1)n。