跳转到内容

离散数学/递归

来自维基教科书,开放的书籍,开放的世界
离散数学
 ← 图论 递归 半群 → 

在本节中,我们将探讨一些数学过程,这些过程的核心是递归的基本性质。

什么是递归?

[编辑 | 编辑源代码]

简单来说,递归就是用自身来描述一个动作的过程。这可能听起来有点奇怪,但一旦你理解了,它就是一种表达某些概念的极其强大的方法。

让我们看一些例子,让事情更清晰。

当我们计算一个指数,比如x3时,我们将x自乘三次。如果我们有x5,我们将x自乘五次。

然而,如果我们想要指数的递归定义,我们需要用自身来定义取指数的操作。因此我们注意到,例如x4x3 × x相同。但什么是x3x3x2 × 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)=u1f(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可能是一个解。我们可以证明,如果(且仅当)它解出特征方程,它就是一个解 ;

我们将γrnr不等于零)代入递推关系中,得到

γrn-Aγrn-1-Bγrn-2=0

然后用最右边的项γrn-2进行因式分解

γrn-2(r2-Ar-B)=0

我们知道r不等于零,因此rn-2永远不可能为零。因此,r2-Ar-B必须为零,因此,γrn(其中rr2-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,这必须成立,因为rx2 = A* x + B的解

为什么 γ*rn 也满足递归关系? 如果 F(n)=rn 是一个解,也就是说,rn-A*rn-1-B*rn-2=0,那么 F(n)=γrn 当然也是一个解,因为 γrn-Arn-1-Brn-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

离散数学
 ← 图论 递归 半群 → 
华夏公益教科书