找回密码
 立即注册

QQ登录

只需一步,快速开始

Lucas.Su 讲师达人认证 悬赏达人认证 活字格认证

葡萄城公司职员

32

主题

1831

帖子

3389

积分

葡萄城公司职员

积分
3389

讲师达人悬赏达人微信认证勋章元老葡萄活字格认证活字格高级认证

本帖最后由 Tracy.Liu 于 2020-12-4 10:24 编辑

干咱这一行,或多或少都听过这么一个名词:递归
那么递归到底是个什么呢?
简单来说,函数直接或间接调用自己的过程称为递归调用,


那么如何才能掌握递归呢?
其实递归有两个关键点,掌握这两个关键点,也就能掌握递归的冰山一角了,
哈哈哈开个玩笑
言归正传,递归的两个关键点


1、自己调用自己
我们要解决的一个问题,可以通过函数调用自己的方式来解决,
即可以通过将这个问题分解为子问题,然后子问题可以再分解为更小的子问题,就这样不停的分解。
并且该问题与分解后的问题,解决方法是完全一样的,只是参数不一样。
因为这些问题都是通过某一个函数去解决的,最终我们看到的就是不停得函数调用自己,然后就把问题化解了。
如果这个问题不能分解为子问题,或子问题的解决方法与该问题不一样,那就无法通过递归调用来解决。



2、自己可停止调用自己
停止调用的条件非常关键,就是大问题不停的一层层分解为小问题后,
最终必须有一个条件是来终止这种分解动作的(也就是停止调用自己),
做递归运算一定要有这个终止条件,否则就会陷入无限循环。

以上即为递归的关键点,其实百度/知乎一搜一大把,
在本帖提出来的目的,当然也不只是为了给大家解释名词的,
关键是我们如何用活字格的服务端命令来实现递归算法。

在这里我们首先要搞清楚算法和语言之间的关系:
简单粗暴地理解,算法顾名思义,可以理解为运算的一套方法,所以是套方法论,并不是具体的实现,是解决问题的思路,
为了让该方法落地,我们需要依托一种语言来实现这个方法,使其变得可以拿来使用;

毕竟服务端命令已经具备三大结构顺序结构,选择结构,循环结构
从这个角度看,活字格的服务端命令,完全可以看成是门新的语言,是门可视化操作的编程语言,
既然是这样,我们完全有信心用服务端命令来实现递归;

具体该如何实现呢?
接下来,我将借助一个例子,详细介绍实现细节:
例子:有一个节点,下面含有子节点,子节点还有兄弟节点,
该子节点和兄弟节点下面还有孙子节点,展示出来如下图
image.png32961424.png
这时我想删除节点D,当然D之后的子子孙孙也要连带删掉,株连九族,是个狠人儿

分析:我们把删除节点D看做一个大问题,删除D下面的节点E和节点O看做子问题,删除节点E下面的节点F看做孙子问题,
以此类推,最后总归是会删到末代皇帝的,与递归思想如此贴合,这么看完全就可以使用递归算法来实现

接下来就等上干货了,
等等,在上干货之前,我们还需搞明白一件事儿,服务端命令如何实现自己调用自己
在活字格中,服务端命令A调用服务端命令B时,首先得先创建B,这样才能被A调用,
可是自己调用自己,我还没有创建好自己,那该怎么调自己呢,
巧妇难为无米之炊啊,实在是难为我胖虎
胖虎.jpg

转念一想,唉~!我可以先创建个不完全的自己,这样这个命令就存在了,我自然也就可以自己调用自己了。
有了这个想法,那么一切都顺理成章了

image.png967249755.png

再结合这个demo,食用效果更佳哦

递归删除.fgcc (375.35 KB, 下载次数: 501)

评分

参与人数 1满意度 +1 收起 理由
amtath + 1 神马都是浮云,为什么不允许回复呀

查看全部评分

0 个回复

您需要登录后才可以回帖 登录 | 立即注册
返回顶部