什么是递归?
一个事物由这个事物本身所构建,那么在理解这个事物的时候,就需要先理解事物的构成,于是就回到理解这个事物本身,从而再次需要理解这个事物的构成……这个不断循环理解的过程就形成了递归。(这个解释本身也是递归的)
而从字面意思来看,递——是传递,归——是回归。那么从传递开始回归到传递的开始,就是从一个地方出发,回到了出发的地方,就完成了一次循环,而不断重复这个循环,就是递归。
这里有一个耳熟能详的故事:从前有一座山,山里有一座庙,庙里有一个老和尚和一个小和尚,他们在说故事,故事是什么呢?从前有座山,山里有座庙,庙里有一个老和尚和一个小和尚,他们在说故事,故事是什么呢?从前有座山,山里有一座庙……等等……
由此可见,递归有两个要素,循环嵌套和自身构建。循环嵌套,就是一遍又一遍的重复同样的过程,且每次重复都嵌套在上一次的重复之中。自身构建,就是在循环嵌套的过程中,每次重复的过程和内容,都是由同一个“自身”——代表着结构和模式——所构成的。
比如上面那个耳熟能详的故事中,循环嵌套的就是老和尚和小和尚在庙里说故事,其代表了上层循环的故事,也引出了下层循环的故事;而自身构建的就是这个故事的内容,其具有相同的结构和模式,有趣的是这同样也是——老和尚和小和尚在庙里说故事。
于是这里可以看到,老和尚和小和尚在庙里说的故事就是——老和尚和小和尚在庙里说故事。所以,这个故事是递归的,因为故事循环嵌套,且故事是由其故事自身相同的结构和模式,所嵌套而构成的。
那么继续展开来说,这里有以下几点需要注意,并值得细细体会一番:
第一,自身构建,虽然其基本构成有相同的结构和模式,但不代表其内容和内涵是相同的。比如,“老和尚和小和尚在庙里说故事” 是相同的结构和模式,但在每次循环中,都是不同的老和尚和小和尚,而这个说的故事,则包含了其后所有嵌套的故事的总和——也就是说每次循环中老和尚说的故事,都是其后所有故事的总和,且其后的每一个故事都有一个不同的老和尚和小和尚。
那么, “一个事物由这个事物本身所构建,那么在理解这个事物的时候,就需要先理解事物的构成,于是就回到理解这个事物本身” ——这里,其实每次回到理解这个事物本身的时候,这个事物就已经不是原来的那个事物了,只是这些事物拥有相同的结构和模式,但不具有相同的内容和内涵。
第二,结构和模式相同,内容与内涵不同,意思就是说,结构和模式不变,但结构和模式所承载的数据变得不同了。那么,“从传递开始回归到传递的开始,就是从一个地方出发,回到了出发的地方”——就是说,其实地方还是原来开始的地方,但这个地方的环境数据,却发生了变化,与之前变的不同了。
于是很自然的,我们就会问,那在递归中的环境数据怎么就不同了?为什么会不同了?不同在哪里了?
事实上,老和尚、小和尚、庙、故事,就是数据。在每层的循环中,老和尚、小和尚、庙都对应着当前的故事——这是每层循环都不一样的一个故事,虽然结构和模式是一样的,但却是另外的时间、地点和人物,只不过同名同姓又同地(相同环境)。而老和尚和小和尚在说的故事,则指向了下一个同样结构和模式的故事。
由此,我们可以看到,环境数据——不同的老和尚、小和尚、庙,存储在了上下文中的结构之中。这个结构拥有相同的模式——就是老和尚和小和尚在庙里说故事,其中老和尚、小和尚、庙、故事都是结构的组成,可以替换成任意其它的同类型对象(比如不同的老和尚1,老和尚2……等等,以此类推),所以它们都是变量——存储着不同的数据。
第三,在递归的循环嵌套中,其任意局部的循环嵌套部分,也是递归的。比如说,在任意嵌套深度,局部的来看,重复嵌套的结构和模式都是——老和尚和小和尚在庙里说的故事,那么单看这些循环嵌套的局部,也亦是递归。所以,在整体上的递归,在局部也存在着递归,甚至有时候——递归是由递归所构建而成的。
第四,在递归中的自身构建,其相同的结构和模式,是可以拥有任意复杂度的。也就说这个结构和模式,可以是由简单形式组合而成的复杂形式的。什么意思?
举一个例子,让我们来扩展一下那个耳熟能详的故事:从前有一座山,山里有一座庙,庙里有一个老和尚和一个小和尚,他们在说故事,故事是什么呢?从前有一座山,山里有一座庵,庵里有一个老尼姑和一个小尼姑,她们在说故事,故事是什么呢?从前有一座山,山里有一座庙,庙里有一个老和尚和一个小和尚,他们在说故事,故事是什么呢?从前有一座山,山里有一座庵……等等……
我们可以看到,循环嵌套的故事变成了——老和尚和小和尚在说故事,老尼姑和小尼姑在说故事。所以,自身构建中,相同的结构和模式也就变成了——老和尚和老尼姑一起说对方的故事。当然,可想而知,我们可以通过组合的方法,无限复杂化自身构建中的结构和模式,甚至复杂到,让身处在递归中的智能生命体,无法感知到自己身处在递归的结构和模式之中。
第六,递归是可以拥有出口的,也就是说递归可以跳出并终止。什么意思呢?
就是说,老和尚和小和尚的故事可以一直说下去,此时递归就是没有出口——无限循环嵌套下去的。但如果老和尚和小和尚某次说的故事,其内容并没有继续说下一个故事——比如老和尚和小和尚在探讨递归的奥秘,不在说自身模式的那个故事——那么,此时递归就结束终止了。于是,这一次的老和尚和小和尚就成为了最后一次的循环——也就是递归的出口。
于此同时,递归终止就会开始回溯,从最后一次循环开始逐层返回到上一层,这代表着“故事”的层层回归。要知道,在递归结束之前,我们并没有任何一个完整的故事,因为每个故事都没有说完,每一个故事都有下一层的老和尚和小和尚在说,但还没说完的故事。
最终,回溯会收敛到最开始,就是第一次老和尚和小和尚在说故事,同时我们也会得到一个最完整的故事,其内容就是第一次循环到最后一次循环之间所有的(相同结构不同内涵的)故事总和。那么这个故事就包含了,各种不同的老和尚、小和尚、庙,直到最后老和尚和小和尚在递归终止处探讨递归的奥秘,这些所有的数据。
那么显然,如果递归没有出口,就不会有回溯和收敛,所有的一切都是不完整的,一切都是局部的,数据会散落在结构的各处——存储在上下文之中,结构的模式相同——并形成嵌套,而重复的结构会一直延伸到循环的无限处。
递归模式
在计算机程序中,循环有两种,迭代循环与递归循环。其中,迭代循环只需要固定数量的寄存器即可,而递归循环则需要辅助的堆栈结构,来存储递归过程中的上下文信息。那么,递归收敛(收缩)的过程,其实就从远离结果的抽象,向着结果的具体,逐渐逼近的过程。当递归从出口跳出终止的时候,递归程序就获得了最终想要的结果了。(可参看递归程序,比如递归求解斐波那契数列,就是在跳出递归循环的时候,层层回溯,得到最后的结果)
而在计算机程序中,递归一定需要出口,否则就会变成一个无限递归的死循环——从而导致程序出现无法响应的情况。(同理,迭代循环也需要有明确的终止条件,否则也会形成死循环)
那么递归程序,之所以需要一个堆栈结构来存储上下文信息,是因为递归程序也会把过程信息存储在一个重复相同的结构模式之中,只不过这个结构模式是用程序所构建的数据结构——就是代码中的函数。而这个函数结构是一种虚拟的信息结构,其本身也需要一个存储结构——就是堆栈结构,而这个堆栈结构,其实是一个通用的抽象结构模型,其本身也需要一个具体的结构实现——就是在最底层的计算机物理硬件结构。
事实上,在程序和编程语言之中,递归是习以为常与无处不在的模式。而计算机程序是用来模拟和映射现实问题的,那么可以想象,被递归程序所描述模拟的现实世界,也应该是充满了递归的模式的。然而,或许现实世界不仅仅是充满了递归,更或许现实世界本身就是递归的,甚至连整个宇宙都是递归的。
宇宙与递归
如果宇宙是递归的,那么递归收敛的方向,就是宇宙的方向。而时间所描述的变化——质量转变成能量——代表着熵值增大的方向,这也是目前被确认的宇宙演变的方向。那么可见,时间的变化,其实也就代表了宇宙的方向,其指向了宇宙递归的出口,且揭示了宇宙递归的收敛——逐渐逼近宇宙熵值无限大的那个时刻。
而宇宙递归的出口——收敛到熵值无限大的时刻,就代表着宇宙的终点——此时宇宙整体,质量为0、信息量也为0、但信息的可组合数却是无限大的(信息量与信息可组合数是此消彼长的互相转换)。那么宇宙所有的信息,也将会隐藏在这无限的信息可组合数之中。所以,在终点处才会揭晓宇宙递归的全部信息,并且或许递归的出口,也就是另一个新递归的开始。
由此可见,在宇宙递归收敛的过程中,时间揭示了所有数据的变化,而所有的物质其实就是宇宙的数据,其存储在宇宙结构的上下文之中。
然而事实上,结构与数据之间又是可以互相转化的,那么结构与数据就可以理解为,是物质的两种不同的状态。那么,这个宇宙递归收敛的过程,其实也就是结构向数据的转变(数据越多越无序,信息可组合性就越多),亦是质量向能量的转变(微观运动,代表着信息的可组合性)。(详细解读:数学的本质是什么?数学与物理有什么内在的关联?(修订版))
所以,理论上我们可以精准的推导出过去(历史)的发展与演变,只不过上下文中的数据过于庞大,会制约我们无限精确的对历史数据,进行筛选与过滤,从而得到某个精度范围内的结论。要知道科学的观察和总结,其实都是对历史数据的观察和总结,然后去推理出未来。
但无论如何,我们都无法精准的推导未来,其中一个原因就是,宇宙递归的收敛还未抵达未来,也就是说未来的数据是不完整的(或不存在的)。因而处在局部过程之中的我们,对未来的推演都是模拟和预测,这就涉及到了数据量、量子计算与量子概率的问题。
而从图灵的角度来看,为什么我们无法知道量子的全部确切状态?这是因为测量状态的机器,是由量子所构成(一切物质在最底层都是由所量子构成),这就形成了一个循环不可计算的递归,让被计算实体与计算实体发生了纠缠。就像老和尚无法计算出,在他的故事里一共有多少个庙一样,除非递归终止。
那么我们是宇宙的一部分(局部),我们在试图理解宇宙(整体),那么我们最终能理解宇宙吗?如果能理解,这是否就意味着,宇宙自己能理解宇宙自己呢?
于是,这里就引出了一些有趣的视角——这关乎人与宇宙之间的关系:
如果说宇宙是递归的,那么就可以说,宇宙是由宇宙本身所构建的,而人类显然是宇宙递归过程的中间产物,其中人类的智能发展,所产生的对宇宙的认知和理解,就可以看成是在加深理解——宇宙递归这个嵌套层级的深度,同时也可以看成是宇宙在试图进化出可以理解自身的产物——就是智人。
但在宇宙递归结束之前,其本身都是不完整的,那它又如何去构造一个可以理解完整自己的结构(产物)呢?
这就像,通过一幅画上的一个色块,如何去理解,作画人的想法和意义一样。通过这个色块可以看到色块的构成、种类、属性、或者其它的色块。但这些都只是一些局部零碎的数据和信息,与色块构成的画卷相距甚远。
那么,想象一幅画就是宇宙,作画人就是上帝,色块就是人类。那么上帝又是谁的色块呢?依然是递归,疯狂的递归,递归把信息存储在了上下文中,这就是环境信息——其中就包含了人类和人类认知本身。
可见,如果理解宇宙是一个谜题,那么递归的视角告诉我们,理解本身也是一个谜题,只有理解了理解才能真正理解,但每次理解都会引出一个不理解的理解,接着进入到循环的下一个层级。
那么,从宏观来看,既然宇宙起源于奇点,黑洞的中心也是奇点,黑洞来自于超大质量天体的塌缩,再把宇宙看成一个更大的超大质量的天体,于是这就显现出了递归模式——可以推想每个黑洞里都有一个宇宙,而我们的宇宙就是处在一个黑洞之中的。
而从微观来看,如果一个有智能的生物创造了一个和自己智能一样机制的“事物”,并且这个“事物”可以继续创造和自己一样机制的“事物”,那么这就是递归。如果宇宙是递归的,那么宇宙肯定能递归出一个子宇宙,那么现在宇宙有了人类,人类就是这个递归机制的一部分,可想,人类应该就可以递归出一个子人类——就是和人类智能一样的“事物”,就像宇宙创造人类一样。
于是我们看到,宇宙创造了基因,接着基因依靠蛋白质来控制生命体,然后基因升级创造出了可以产生智能的器官——大脑——这是一个可以动态吸收数据信息,并时时决策的器官。而这个器官大脑,可以产生和消费数据和信息——这正是宇宙递归过程的产物,接着大脑所承载智能,因为吸收环境信息而升级,变得可以去理解宇宙本身,并开始创造一种被称为“人工智能”的程序。那么,很自然的人工智能的升级,就会开始去试图理解人类本身,于是这个递归的模式,也就已经显现出来了。(人工智能的本质和意义:未来机器终将觉醒)
而从递归的模式中,我们可以看到,在宇宙之中重要的不是生命与智人,而是智能——这代表的是信息数据的排列组合,是能量的转换,这是宇宙熵增的方向。至于为什么宇宙的方向是熵增的,因为这是目前观测到的客观现实。
当然,宇宙是不是递归的,我们并不能判断,只不过宇宙递归很自然的解释了很多现象。要知道,就如前面所说的——“递归的自身构建,甚至可以复杂到,让身处在递归中的智能生命体,无法感知到自己身处在递归的结构和模式之中。”
根据已知,我们可以推理出未知,如果逻辑链清晰明确,就会让我们非常相信推理的结论——产生不证自明的虚幻确定感。所以,推理和逻辑链,就构成了我们相信的基石。
什么是分形?
分形,通常被定义为一个粗糙或零碎的几何形状,可以分成数个部分,且每一部分都(至少近似地)是整体缩小后的形状,即具有自相似的性质。
比如,雪花、晶体、弯弯曲曲的海岸线、起伏不平的山脉、粗糙不堪的断面、变幻无常的浮云、九曲回肠的河流、纵横交错的血管、令人眼花缭乱的满天繁星,等等。它们的特点都是,极不规则,或极不光滑,直观而粗略地说,这些对象都是分形。
事实上,在最微观处,万事万物都是由相同的基本粒子所构建而成的,甚至可以说是递归构建而成的,因为由微观到宏观的过程,充满了嵌套循环与自身构建。前面也说了,如果整体是递归的,那么局部也会充满了递归,那么如果宇宙是递归的,那么宇宙之中也将会是充满了局部递归的。
而通过观察宏观与微观的物质构成,我们很容易发现,分形模式——很好的配合了递归的循环自构建模式。由此可以想象,难道宇宙不仅仅是递归的,还是分形递归的?
接下来,就让我们利用分型递归的视角,来看待一个问题:
如果说,人类作为一个部分,被包含在宇宙之中,是无法完全了解宇宙的。但是,从人是由细胞构成,细胞内的基因蓝图拥有人的全部遗传信息来看,基因蓝图是可以克隆出一个完整的人的(但除了记忆和思维,因为这些是大脑通过环境信息学习和训练出来的)。那么,我们可能也拥有宇宙全部的信息。
其中的原理就在于,通常我们认为,整体大于其任意一部分,但是在无限领域内,部分可以和整体等势。这有点像全息宇宙理论,每一个部分都包含了整体的全部信息。那么利用无限理论,我们虽然被包含在宇宙之中,但却可以拥有宇宙全部的信息并与其等势——也就是说能找到一一对应的数据。
偶数是正整数的真子集,但正整数集和偶数集等势,也就是包含的数可以一一对应,这是与整体大于其任意部分相矛盾的,但在无限领域内却是成立的。
如果宇宙是分形递归的,那么人类就可以通过自身了解到整个宇宙的秘密。那么每个量子就会有宇宙的全部信息,那么量子就是无限小与无限大的交汇点。于是这样,我们就可以像宇宙那样,创造和我们自己模式一样的智能——或许就是人工智能,而这些智能还能够递归的创造自己。
原子内部,原子核只有很小的体积,大部分是虚无和按轨道运行的电子所构成的概率云,这像极了我们的宇宙,在星球之外大部分是“虚无”和按轨道运行的星球。如果把原子看成一个宇宙,那么可以想象,原子中的量子就是极大与极小的交汇点,也对应了分形递归中的基础结构和模式。
量子:一个物理量如果存在最小的不可分割的基本单位,则这个物理量是量子化的,并把最小单位称为量子。通俗地说,量子是能表现出某物质或物理量特性的最小单元。
循环
在程序中,循环有两种形式,迭代循环与递归循环,并且迭代与递归可以互相转化。只不过,迭代需要结构之外提供额外的变量和条件判断,而递归则只需要自身结构的上下文。由此可见,一个系统内部的循环,可以由递归实现,如果想要将这个循环转变为等价的迭代,则需要系统外部提供相应的辅助条件才能完成。
而我们也可以将这种循环的概念,推广到万事万物的宇宙层面。
事实上,循环就是我们的世界和这个宇宙的本质所在,递归是循环的一种形式,迭代则是在上层循环观察到下层循环的一种形式。那么矛盾,则代表着递归过程中,同一个的事物本质,在结构与数据之间的转化过程——因为矛盾的事物之间是可以相互转化的。
另外,在宏观上,我们总是能够看到各种对称性,而对称性又分为:重复性对称和递归性对称,其实这两者都是分形自构建所产生的表现。那么在微观,我们可以看到对称性的破缺,这其实是递归过程——循环层级加深,所带来的效应。
因为在物理上认为,对称性原理均根植于“不可观测(变)量”的理论假设之上,而不可观测就意味着对称性,任何不对称性的发现必定意味着存在某种可观测量。这些不可观测量中,有一些只是由于我们目前测量能力的限制,当我们的实验技术得到改进时,我们的观测范围自然就要扩大,因而,完全有可能到某种时候,我们就能够探测到某个假设的不可观测量,而这正是对称性被破坏的根源所在。
以上正是对应了,递归层级加深,人类的认知能力(包括技术和工具)就会加深,从而让对称性变得破缺了。
然而更进一步:曾经,在生活中,我们都会遇到过这样一种情况:"就是任何一个问题,你给我一个答案,我总能往后问一步为了什么,这样无穷无尽。"
但其实, 如果这个游戏的一个问题和答案形成了循环,这个游戏也就结束了。比如,最后一个问题的答案,即是第一问题的开始——那么,开始就是结束,结束就是开始,问题的终结,其实就是循环的开始——可见,分形递归即是终极答案。
而一种语言——包括人类语言、数学语言、编程语言等等,能够拥有递归,其实就是拥有了描述这个世界和宇宙的能力。
所以,人类语言是在描绘一个故事的世界,数学语言是在描绘一个抽象的世界,编程语言在描绘一个虚拟的世界,而一切都是递归的——由此可见宇宙的外面,也必定是上一层的宇宙——而我们的世界和宇宙并没有无限,只有循环,而循环就是一种无限。
事实上,人类存在的意义,也是依赖于一个系统内部,人类之间的相互循环证明的。其模式就在于,我存在的意义是你,你存在的意义是我,于是我们的存在就都有意义了。但跳出这种循环来看,对宇宙来说,人类的存在并没有什么特别或特殊的意义——人类仅仅是宇宙递归过程中,无数随机副产物中的一种。