递回
当概念或过程的定义取决于自身的更简单或以前的版本时,就会发生递归。递归用于从语言到逻辑的各种学科。递归的最常见应用是在数学和计算机科学中,其中定义的函数在其自身的定义中应用。尽管这显然定义了无限数量的实例(函数值),但通常以无限的环路或无限参考链的方式完成。
表现出递归的过程是递归的。
正式定义
在数学和计算机科学中,一类对像或方法表现出递归行为,可以通过两个属性来定义:
- 一个简单的基本案例(或案例) - 一种不使用递归产生答案的终止场景
- 递归步骤- 一组规则,可以减少所有连续的案件对基本情况。
例如,以下是对一个人的祖先的递归定义。一个人的祖先是:
- 父母(基本案例)或
- 父母的祖先(递归步骤)。
斐波那契序列是递归的另一个经典例子:
- fib(0)= 0作为基本情况1,
- fib(1)= 1作为基本情况2,
- 对于所有整数n > 1 , fib( n )= fib( n -1) + fib( n -2) 。
许多数学公理基于递归规则。例如, Peano Axioms对自然数的形式定义可以描述为:“零是自然数字,每个自然数字都有一个继任者,这也是自然数字。”通过这种基本情况和递归规则,可以生成所有自然数的集合。
其他递归定义的数学对象包括阶乘,函数(例如,复发关系),集合(例如,康托尔三元集)和分形。
递归中还有更多的舌头定义。参见递归幽默。
非正式定义
递归是当过程的一个步骤之一涉及调用过程本身时,过程正在通过一个过程。通过递归的程序被称为“递归”。
要了解递归,必须识别过程与运行过程之间的区别。一个过程是基于一组规则的一组步骤,而过程的运行涉及实际遵循规则并执行步骤。
递归与在执行某些其他过程的过程规范规范中的参考中有关但不相同。
当这样定义过程时,这立即创造了无尽循环的可能性。如果在某些情况下跳过了有关步骤以完成该过程,则只有在定义中正确使用递归。
即使正确定义了它,人类也不容易执行递归过程,因为它需要将新的,部分执行的过程进行区分;这就需要一些管理程序的同时实例进行了一些管理。因此,在日常情况下,递归定义非常罕见。
语言
语言学家诺阿姆·乔姆斯基(Noam Chomsky)等人认为,语言中语法句子的数量缺乏上限,并且缺乏对语法句子长度的上限(除了实际的约束之外,诸如诸如可用的时间之外),可以解释为自然语言递归的结果。
这可以从句法类别(例如句子)的递归定义来理解。一个句子可以具有一个结构,其中动词是另一个句子:多萝西认为巫婆很危险,其中句子是在较大的一个句子中发生危险的。因此,可以将句子递归(非常粗略)为具有名词短语,动词和另外句子的结构的内容。这实际上只是递归数学定义的特殊情况。
这提供了一种理解语言的创造力(语法句子数量无限的语法句子)的方法,因为它立即预测句子可以任意长度: Dorothy认为Toto怀疑Tin Man所说的...。除句子外,还有许多结构可以递归定义,因此,句子可以将一个类别的实例嵌入另一个类别的方式。多年来,语言总体上已被证明是这种分析的。
丹尼尔·埃弗里特(Daniel Everett)在他对Pirahã语言的主张的基础上挑战了递归是人类语言的重要特性的普遍接受的想法。安德鲁·内文斯(Andrew Nevins),戴维·佩塞斯基(David Pesetsky)和塞琳·罗德里格斯(Cilene Rodrigues)是许多反对这一点的人。在任何情况下,都可以说文学自我参考与数学或逻辑递归不同。
递归不仅在语法中,而且在自然语言语义中起着至关重要的作用。例如,可以将单词和单词解释为可以应用于句子含义以创建新句子的函数,同样适用于名词短语含义,动词短语含义等。它也可以应用于不及物动词,及时动词或引用动词。为了为其提供适当灵活的单一表示,通常是定义的,以便它可以将这些不同类型的含义中的任何一种作为参数。这可以通过为简单的情况定义结合句子,然后根据简单的情况递归定义其他情况来完成。
递归幽默
递归有时在计算机科学,编程,哲学或数学教科书中幽默地使用,通常是通过给出循环的定义或自我参考,其中推定的递归步骤不会更接近基本案例,而是导致无限回归。这样的书将开玩笑的条目包括在词汇表中并不罕见:
- 递归,请参见递归。
在Brian Kernighan和Dennis Ritchie的书《 C编程语言》的某些版本的索引中,第269页上有一个变化;索引输入递归引用本身(“递归86、139、141、182、202、269”)。可以在LaurentSiklóssy的Let's Talk Lisp中找到这个笑话的早期版本(1975年12月1日由Prentice Hall Ptr出版,1976年的版权日期)和Kernighan和Plauger(由Kernighan和Plauger发行)(由Addison-Wesley Professional发行1976年1月11日)。这个笑话也出现在Kernighan和Pike的Unix编程环境中。它没有出现在C编程语言的第一版中。这个笑话是功能编程民俗的一部分,在出版上述书籍之前,在功能编程社区中已经广泛存在。
另一个笑话是“要了解递归,您必须了解递归”。在Google Web搜索引擎的英语版本中,当对“递归”进行搜索时,该网站建议“您的意思是:递归”。另一种形式是安德鲁·普洛特金(Andrew Plotkin)的以下方式:“如果您已经知道什么是递归,请记住答案。否则,找到一个比您更靠近道格拉斯·霍夫斯塔特(Douglas Hofstadter)的人,而不是你;然后问他或她什么是递归。”
递归首字母缩写是递归幽默的其他例子。例如, PHP代表“ PHP超文本预处理器”,葡萄酒代表“葡萄酒不是仿真器”, GNU代表“ GNU的Not Unix”, Sparql表示“ SPARQL协议和RDF查询语言”。
在数学中
递归定义的集合
示例:自然数
递归定义集的规范示例由自然数给出:
- 0在
- 如果n在中,则n + 1在
- 自然数是满足前两个属性的最小集合。
在数学逻辑中, Peano Axioms (或Peano假设或Dedekind – Peano Axioms)是19世纪由德国数学家Richard Dedekind和意大利数学家Giuseppe Peano提出的自然数的公理。 Peano Axioms定义了自然数,指的是递归后继函数以及添加和乘法作为递归函数。
示例:证明过程
另一个有趣的示例是公理系统中所有“可证明”命题的集合,该集合根据证明程序定义,该程序是归纳(或递归)定义如下:
- 如果一个命题是公理,那是可证明的命题。
- 如果可以通过推理规则从真实的可及命题中得出命题,那是一个可证明的命题。
- 一组可证明的命题是满足这些条件的最小命题。
有限细分规则
有限细分规则是递归的几何形式,可用于创建分形图像。一个细分规则以有限的许多标签标记的多边形集合开始,然后将每个多边形细分为较小的标记多边形,仅取决于原始多边形的标签。可以迭代此过程。用于创建Cantor集的标准“中间三分”技术是一个细分规则, Barycentric细分也是如此。
功能递归
一个函数可以根据自身的递归定义。一个熟悉的示例是斐波那契数序列: f ( n )= f ( n -1) + f ( n -2)。为了使这样的定义有用,必须将其降低到非征收定义的值:在这种情况下, f (0)= 0和f (1)= 1。
著名的递归功能是Ackermann函数,与斐波那契序列不同,它在没有递归的情况下无法表示。
涉及递归定义的证据
像前面的部分一样,通过案例应用标准的证明技术来递归定义的集合或功能,从而产生了结构性诱导,这是对数学诱导的有力概括,以广泛用于在数学逻辑和计算机科学中得出证明。
递归优化
动态编程是一种优化方法,以递归形式重述多项式或多步优化问题。动态编程的关键结果是Bellman方程,该方程在较早的时间(或更早的时间)(或较晚的步骤)上写下优化问题的值。
递归定理
在集合理论中,这是一个定理,保证存在递归定义的函数。给定一个集合x,x和a函数f:x→x的元素a,定理指出有一个唯一的函数(其中表示包括零的自然数(包括零)的集合),这样
对于任何自然数字n 。
Dedekind是第一个在递归中提出了对设定理论功能独特定义的问题的问题,并在1888年的文章中给出了一个论点的草图“是sind und und und und and sollen die zahlen?”
独特的证明
采用两个功能,这样:
其中a是x的元素。
可以通过数学诱导证明所有自然数n : f ( n )= g ( n ) :
- 基本情况: f (0)= a = g (0) ,因此n = 0的相等性保持。
- 归纳步骤:假设某些人为f(k)= g(k)。然后f(k + 1)= f(f(k))= f(g(k))= g(k + 1)。
- 因此f ( k )= g ( k )意味着f ( k + 1)= g ( k + 1) 。
通过诱导,f(n)= g(n)的所有人。
在计算机科学中
简化的一种常见方法是将问题分为相同类型的子问题。作为计算机编程技术,这称为Divide and Conquer ,是设计许多重要算法的关键。 Divide and Conquer是一种自上而下的解决问题方法,在该方法中,通过解决越来越小的实例来解决问题。相反的方法是动态编程。这种方法是一种自下而上的方法,通过解决越来越大的实例来解决问题,直到达到所需的尺寸为止。
递归的一个经典示例是阶乘函数的定义,此处在Python代码中给出:
def factorial(n):
if n > 0:
return n * factorial(n - 1)
else:
return 1
该功能在较小版本的输入上递归调用(n - 1)
并乘以递归电话的结果n
,直到达到基本情况,类似于阶乘的数学定义。
当函数以更简单的(通常较小的版本)定义时,计算机编程中的递归将举例说明。然后,通过组合从问题的简单版本中获得的解决方案来设计解决问题的解决方案。递归的一个示例应用是编程语言的解析器中。递归的最大优点是,可以通过有限的计算机程序来定义,解析或生产一组无限的句子,设计或其他数据。
复发关系是递归定义一个或多个序列的方程式。可以“解决”某些特定类型的复发关系以获得非恢复定义(例如,封闭形式的表达)。
在算法中使用递归具有优势和缺点。主要优势通常是说明的简单性。主要缺点是递归算法的记忆使用可能会很快增长,从而使它们在更大的实例中不切实际。
在生物学中
似乎是由递归过程产生的形状有时会出现在动植物中,例如在分支结构中,一个大部分分支分为两个或更多类似的较小部分。一个例子是罗马尼科花园。
在社会科学中
作者利用递归的概念来预示社会科学家在产生有关世界一定已经成为世界的知识时发现自己的情况。根据奥黛丽·亚历杭德罗(Audrey Alejandro)的说法,“作为社会科学家,我们状况的递归涉及我们既是主题(作为话语是我们分析的媒介)和我们产生的学术论述的对象的事实(因为我们属于社会主义者我们分析的世界)。”从这个基础上,她在递归中确定了产生解放知识的基本挑战,该知识要求行使反思性努力:
我们旨在挑战社会政治秩序所产生的话语和倾向,我们可能会在社会政治秩序中挑战,因此,我们可能会不自觉地繁殖,而旨在进行相反的目标。我们处境作为学者的递归- 更确切地说,我们用来产生有关世界知识的性格工具本身是由这个世界产生的事实- 都表明了实践中实施反思性的重要必要性,并在实践中构成了主要挑战这样做。
-奥黛丽·亚历杭德罗(Audrey Alejandro),亚历杭德罗(2021)
在业务
递归有时在管理科学中被称为通过大型企业实体的抽像水平进行迭代的过程。一个常见的例子是管理层次结构的递归性质,从线路管理到高级管理层的递归性质。它还涵盖了公司治理中更大的资本结构问题。
在艺术中
俄罗斯娃娃或Matryoshka娃娃是递归概念的物理艺术例子。
自Giotto的Stefaneschi Triptych (1320年制造)以来,递归已被用于绘画中。其中央面板包含跪下的Stefaneschi的膝盖身材,将三联链本身作为产品举起。这种做法通常被称为droste效应,这是mise en abyme技术的一个例子。
Mc Escher的印刷画廊(1956年)是一张印刷品,描绘了一个扭曲的城市,该城市包含一个画廊,递归包含图片,因此是无限的。
在文化中
这部电影的成立已使后缀感受的添加到名词中,以开玩笑地表明了某物的递归。
也可以看看
- Corecursion - 计算机科学算法的类型
- 价值递归课程- 通过递归定义数字理论功能的技术
- 数字无限- 理论语言学中的术语
- 梦中的梦(诗) - 埃德加·艾伦·坡(Edgar Allan Poe)的诗
- droste效应- 递归视觉效果
- 虚假的觉醒- 生动而令人信服的梦想从睡眠中觉醒
- 固定点组合器- y f = f(y f)的高阶函数y
- 分析功能的无限组成- 关于无限迭代函数组成的数学理论
- 无限循环- 编程成语
- 无限回归- 哲学问题
- 无限主义- 幻想观点,即知识可以通过无限链条来证明知识是合理的
- 无限镜- 平行或倾斜的镜子,产生似乎消退至无穷大的反射
- 迭代功能- 反复应用数学功能的结果
- 数学归纳- 数学证明的形式
- Mise Enabyme - 将图像副本放置在本身或故事中的技术
- 重新进入(子例程) - 计算机编程中的概念
- 自我参考- 句子,思想或公式
- Spiegel Im Spiegel - 1978年的音乐作品ArvoPärt
- 奇怪的循环- 循环结构在层次系统中经过多个级别
- 尾部递归- 作为过程的最终动作执行的子例程呼叫
- Tupper的自我参照公式- 图形时在视觉上代表自己的公式
- 乌龟一直向下- 无限退缩的陈述