构造科赫曲线的前四个步骤,科赫曲线和很多分形一样,是用递归定义的
递归定义是数理逻辑和计算机科学用到的一种定义方式,使用被定义对象的自身来为其下定义(简单说就是自我复制的定义)。递归定义与归纳定义类似,但也有不同之处。递归定义中使用被定义对象自身来定义,而归纳定义是使用被定义对象的已经定义的部分来定义尚未定义的部分。不过,使用递归定义的函数或集合,它们的性质可以用数学归纳法,通过递归定义的内容来证明。
大部分的递归定义都由三个部分构成:基本情况的定义,递归法则和递归结束的情况。如果定义的对象是无限的,那么可以省略第三个部分(递归结束的情况)。比如说,可以用递归定义的方式来定义如下的一个自然数集上的函数
:
![{\displaystyle f(0)=1}](https://wikimedia.org/api/rest_v1/media/math/render/svg/00884d9c3ef0dbc18fe185a4444f1da931c8ba0a)
![{\displaystyle \forall n>0,\,\,f(n)=n\times f(n-1).}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a57c0ee0fc3bc646435a09d6db8ff08d21428e9d)
这个定义在逻辑上是成立的,因为它首先定义了
在最小的自然数0上的取值,接下来对每个大于零的自然数
,只要重复有限多次定义的过程,最终就会回到对0的定义上。这样定义出的函数
就是阶乘函数。
递归定义和循环定义的不同之处在于,后者不包括对基本情况的定义。比如定义建立在整数集上的函数
:
![{\displaystyle \forall n\in \mathbb {Z} ,\,\,g(n)=g(n-1)+1,}](https://wikimedia.org/api/rest_v1/media/math/render/svg/2a443e321351d068c20040507b26131e0932ff74)
则我们永远无法确定
的取值,这便是循环定义。
基于递归定理,设
是一个集合,并且设
是
的一个元素;如果有函数
,为每个映射正整数集的非空子集至
的函数
,指派
的一个元素
,那么存在一个唯一的函数
使得:
![{\displaystyle {\begin{aligned}h(1)&=a_{0}\\h(i)&=\rho \left(h|_{\{1,2,\ldots ,i-1\}}\right){\text{ for }}i>1\end{aligned}}}](https://wikimedia.org/api/rest_v1/media/math/render/svg/a726bd2d0356dd848783071817f566443f8f4b8b)
这里的
表示将
限制于
。
- P. Aczel (1977), "An introduction to inductive definitions", Handbook of Mathematical Logic, J. Barwise (ed.), ISBN 0-444-86388-5
- James L. Hein (2009), Discrete Structures, Logic, and Computability. ISBN 0-7637-7206-2