宇宙现实的运作模式是什么?程序现实与物理现实会有着怎样的结构关联?无限是否存在且意味着什么?宇宙从哪里来要到那里去?它的目的和意义又是什么?
本文,将会从——递归、分形、循环——这三个层层递进,又相互关联的逻辑视角,给出一个从微观到宏观的图景(脑洞与烧脑并存)。
注:本文是《宇宙的奥秘》的升级版,在之前的概念基础之上,进行了更加深入、细致和全面的推演和分析,并给出了更加清晰明确的思路和逻辑。如果没有读过第一版,可以直接阅读第二版。
主题目录如下:
- 什么是递归
- 程序与递归
- 迭代与递归
- 宇宙与递归
- 人类与递归
- 递归模式
- 分形递归
- 循环
- 结语
- One More Thing——无限
什么是递归
一个事物由这个事物本身所构建,那么在理解这个事物的时候,就需要先理解事物的构成,于是就回到理解这个事物本身,从而再次需要理解这个事物的构成……这个不断循环理解的过程就形成了——递归。
显然,这个递归的解释本身也是递归的。
而从字面意思来看,递——是传递,归——是回归,那么从传递开始回归到传递的开始,就是从一个地方出发,回到了出发的地方,就完成了一次循环,而不断重复这个循环,就是——递归。
这里有一个耳熟能详的递归故事:
从前有一座山,山里有一座庙,庙里有一个老和尚和一个小和尚,他们在说故事,故事是什么呢?从前有座山,山里有座庙,庙里有一个老和尚和一个小和尚,他们在说故事,故事是什么呢?从前有座山,山里有一座庙……等等……
由此可见,递归有两个要素,即:循环嵌套和自身构建。
- 首先,循环嵌套——就是一遍又一遍的重复同样的过程,且每次重复都嵌套在上一次的重复之中。
- 其次,自身构建——就是在循环嵌套的过程中,每次重复的过程和内容,都是由同一个“自身”(代表着结构和模式)所构成的。
例如,在上面那个耳熟能详的递归故事中:
- 循环嵌套的——就是老和尚和小和尚在庙里说故事,其代表了上层循环的故事,也引出了下层循环的故事。
- 而自身构建的——就是这个故事的内容,其具有相同的结构和模式,有趣的是这同样也是“老和尚和小和尚在庙里说故事”。
于是我们可以看到,老和尚和小和尚在庙里说的故事就是——“老和尚和小和尚在庙里说故事”。所以,这个故事是递归的,因为故事循环嵌套,且故事是由其故事自身相同的结构和模式,所嵌套而构成的。
那么继续展开来说,这里有以下几点值得深思,并细细体会一番:
第一,自身构建,虽然其基本构成有相同的结构和模式,但不代表其内容和内涵是相同的。
例如,“老和尚和小和尚在庙里说故事”——是相同的结构和模式,但在每次循环中,都是不同的老和尚和小和尚,而这个说的故事,则包含了其后所有嵌套的故事的总和——也就是说每次循环中老和尚说的故事,都是其后所有故事的总和,且其后的每一个故事都有一个不同的老和尚和小和尚。
那么, “一个事物由这个事物本身所构建,那么在理解这个事物的时候,就需要先理解事物的构成,于是就回到理解这个事物本身。” ——这里,其实每次回到理解这个事物本身的时候,这个事物就已经不是原来的那个事物了,只是这些事物拥有相同的结构和模式,但不具有相同的内容和内涵。
第二,结构和模式相同,内容与内涵不同,意思就是说,结构和模式不变,但结构和模式所承载的数据变得不同了。
那么,“从传递开始回归到传递的开始,就是从一个地方出发,回到了出发的地方。”——这就是说,其实地方还是原来开始的地方,但这个地方的环境数据(环境信息),却发生了变化,与之前变的不同了。
于是很自然的,我们就会问,那在递归中的环境数据怎么就不同了?为什么会不同了?不同在哪里了?
事实上,老和尚、小和尚、庙、故事——就是数据(信息)。在每层的循环中,老和尚、小和尚、庙都对应着当前的故事——这是每层循环都不一样的一个故事,虽然结构和模式是一样的,但却是另外的时间、地点和人物,只不过同名同姓又同地(相同环境)。而老和尚和小和尚在说的故事,则指向了下一个同样结构和模式的故事。
由此,我们可以看到,环境数据——不同的老和尚、小和尚、庙,存储在了上下文中的结构之中。这个结构拥有相同的模式——就是“老和尚和小和尚在庙里说故事”,其中老和尚、小和尚、庙、故事都是结构的组成,可以替换成任意其它的同类型对象(比如不同的老和尚1,老和尚2……等等,以此类推),所以它们都是变量——存储着不同的数据。
第三,在递归的循环嵌套中,其任意局部的循环嵌套部分,也是递归的。
例如,在任意嵌套深度,局部的来看,重复嵌套的结构和模式都是——“老和尚和小和尚在庙里说的故事”,那么单看这些循环嵌套的局部,也亦是递归。
所以,在整体上的递归,在局部也存在着递归,甚至有时候——递归是由递归所构建而成的。
第四,在递归中的自身构建,其相同的结构和模式,是可以拥有任意复杂度的。
也就是说,这个结构和模式,可以是由简单形式组合而成的复杂形式的——什么意思?举一个例子,让我们来扩展一下那个耳熟能详的递归故事:
从前有一座山,山里有一座庙,庙里有一个老和尚和一个小和尚,他们在说故事,故事是什么呢?从前有一座山,山里有一座庵,庵里有一个老尼姑和一个小尼姑,她们在说故事,故事是什么呢?从前有一座山,山里有一座庙,庙里有一个老和尚和一个小和尚,他们在说故事,故事是什么呢?从前有一座山,山里有一座庵……等等……
我们可以看到,循环嵌套的故事变成了——“老和尚和小和尚在说故事,老尼姑和小尼姑在说故事”。所以,在自身构建中,相同的结构和模式也就变成了——“老和尚和老尼姑一起说对方的故事”。
当然,可想而知,我们可以通过组合的方法,无限复杂化自身构建中的结构和模式——甚至复杂到,让身处在递归中的智能生命体,无法感知到自己身处在递归的结构和模式之中。
第六,递归是可以拥有出口的,也就是说递归可以跳出并终止。
什么意思呢?这就是说,老和尚和小和尚的故事可以一直说下去,此时递归就是没有出口——无限循环嵌套下去的。
但如果老和尚和小和尚某次说的故事,其内容并没有继续说下一个故事——比如老和尚和小和尚在探讨递归的奥秘,不在说自身模式的那个故事——那么,此时递归就结束终止了。于是,这一次的老和尚和小和尚就成为了最后一次的循环——也就是递归的出口。
而同时,递归终止就会开始回溯,从最后一次循环开始逐层返回到上一层,这代表着“故事”的层层回归。
要知道,在递归结束之前,我们并没有任何一个完整的故事,因为每个故事都没有说完,每一个故事都有下一层的老和尚和小和尚在说,但还没说完的故事。
最终,回溯会收敛到最开始,就是第一次老和尚和小和尚在说故事,同时我们也会得到一个最完整的故事,其内容就是第一次循环到最后一次循环之间所有的(相同结构不同内涵的)故事总和。
于是,这个故事就包含了——各种不同的老和尚、小和尚、庙,直到最后老和尚和小和尚在递归终止处探讨递归的奥秘,这些所有的数据。
那么显然,如果递归没有出口,就不会有回溯和收敛,所有的一切都是不完整的,一切都是局部的,数据会散落在结构的各处——存储在上下文之中,结构的模式相同——并形成嵌套,而重复的结构会一直延伸到循环的无限处。
这里再给出一个,更加简单且贴近生活的一个递归模式:
例如,公司的日常管理,总裁只会管理副总裁,副总裁管理部门负责人,部门负责人管理总监,总监管理经理,经理管理员工——每一层都是抽象化相同的管理,而从员工层层回溯的是执行力,当总裁了解公司执行情况的时候,一次递归调用就结束了。