1 00:00:21,734 --> 00:00:24,784 Ethic 和 Hedge 从高塔坠落, 2 00:00:24,784 --> 00:00:29,024 翻滚着掉进了纯能量激流中, 3 00:00:30,944 --> 00:00:36,881 这条来自 Bradbarrier 的激流 通向 Huxenborg。 4 00:00:36,881 --> 00:00:39,981 那里整个城市的工厂 都在制造机器人, 5 00:00:39,981 --> 00:00:43,061 也是记忆节点的存放地点。 6 00:00:43,061 --> 00:00:47,433 三件强力神器中,记忆节点 是 Ethic 需要收集的最后一件。 7 00:00:47,433 --> 00:00:49,943 度过了漫长的一天 和更漫长的夜晚后, 8 00:00:49,943 --> 00:00:53,663 他们发现自己正身处 由砖块和钢铁构成的峡谷中。 9 00:00:58,918 --> 00:01:01,573 正当他们快到达激流的尽头时, 10 00:01:01,573 --> 00:01:03,323 一条绳索套住了他们, 11 00:01:07,023 --> 00:01:10,147 他们的救世主 Lemma 已等候多时。 12 00:01:11,137 --> 00:01:15,089 当 Ethic 从森林高塔取得创造节点后, 13 00:01:15,089 --> 00:01:18,989 陆地上所有的无线装置 都恢复了正常运作。 14 00:01:18,989 --> 00:01:23,765 反抗军领袖 Adila 立即开始联系盟友, 15 00:01:23,765 --> 00:01:26,375 首推在 Huxenborg 工作的 杰出科学家 Lemma, 16 00:01:26,375 --> 00:01:32,268 由她从内部协助打败机器人。 17 00:01:32,268 --> 00:01:36,268 不料,无线电波也惊动了守卫。 18 00:01:36,268 --> 00:01:38,528 守卫因此采取了防御措施, 19 00:01:38,528 --> 00:01:43,356 来保护位于城市中心 关键区域的最后神器。 20 00:01:43,356 --> 00:01:48,511 要到达那里,只有一种办法: 战胜分叉路径的严酷挑战。 21 00:01:48,511 --> 00:01:54,897 这是一系列致命的发光传送带, 在 Huxenborg 地下蜿蜒而行。 22 00:01:54,897 --> 00:01:56,717 从当前位置开始, 23 00:01:56,717 --> 00:02:01,112 每条路延伸一段后就分为两条; 24 00:02:01,112 --> 00:02:04,542 每个分支不断重复此过程, 25 00:02:04,542 --> 00:02:06,942 从而产生了成千上万的分支。 26 00:02:06,942 --> 00:02:12,884 通往神器的路只有一条; 其他的路径只会通向毁灭。 27 00:02:12,884 --> 00:02:17,503 幸运的是,创造节点 赋予了 Hedge 一种神秘力量: 28 00:02:17,503 --> 00:02:21,223 能生成比自身略小的两个复制体。 29 00:02:21,223 --> 00:02:26,433 每个复制体只能做两件事: 30 00:02:26,433 --> 00:02:30,173 通过无线电向父级传回信息, 并复制两个更小的自己 ... ... 31 00:02:30,173 --> 00:02:33,863 这些复制体与其子级复制体 也会做同样的这两件事, 32 00:02:33,863 --> 00:02:36,803 不断复制直至满足数量。 33 00:02:36,803 --> 00:02:41,854 一支巡逻队正在接近他们, Ethic 的时间很有限。 34 00:02:41,854 --> 00:02:47,057 为了找到安全路径, 她该给 Hedge 下达什么指令? 35 00:02:47,057 --> 00:02:53,835 [ 可暂停视频,自行解题 ] 36 00:02:53,835 --> 00:02:54,825 [ 答案揭晓:3 ] 37 00:02:54,825 --> 00:02:56,025 [ 答案揭晓:2 ] 38 00:02:56,025 --> 00:02:56,985 [ 答案揭晓:1 ] 39 00:02:57,665 --> 00:03:02,987 程序员的装备库中 有一件强大的工具叫递归, 40 00:03:02,987 --> 00:03:08,328 它是一组不断进行自引用的指令, 41 00:03:08,328 --> 00:03:11,288 就像用一个词本身来定义这个词, 42 00:03:11,288 --> 00:03:15,848 除了让人觉得怪异之外, 这种方式本身非常有效。 43 00:03:15,848 --> 00:03:20,360 递归涉及重复,但与循环不同。 44 00:03:20,360 --> 00:03:24,360 循环在执行一次操作后, 会重复执行这个过程, 45 00:03:24,360 --> 00:03:28,662 而递归在开始执行一次操作后 , 会在完成之前再次执行操作, 46 00:03:28,662 --> 00:03:32,662 完成前再次执行同样动作, 以此类推下去 ... ... 47 00:03:32,662 --> 00:03:36,662 一直重复此操作, 直到满足某种条件, 48 00:03:36,662 --> 00:03:40,824 然后将信息一层层传递回去, 49 00:03:40,824 --> 00:03:44,444 直到传回起点,最后结束循环。 50 00:03:44,444 --> 00:03:49,106 递归非常适合解决 涉及自相似性的问题, 51 00:03:49,106 --> 00:03:51,966 其中每个部分都与整体高度相似。 52 00:03:51,966 --> 00:03:57,970 例如,一个致命的防御系统, 53 00:03:57,970 --> 00:03:59,860 设计用来终结任何大胆的闯入者。 54 00:03:59,860 --> 00:04:01,920 [ 可暂停视频,自行解题 ] 55 00:04:01,920 --> 00:04:02,713 [ 答案揭晓:3 ] 56 00:04:02,713 --> 00:04:03,633 [ 答案揭晓:2 ] 57 00:04:03,633 --> 00:04:04,713 [ 答案揭晓:1 ] 58 00:04:04,993 --> 00:04:08,034 Ethic 的难题表面看起来很难, 59 00:04:08,034 --> 00:04:12,400 但使用递归就特别简单了。 60 00:04:12,400 --> 00:04:17,150 为了找到这个方法, 先来看看谜题的最简版本: 61 00:04:17,150 --> 00:04:20,420 如果整个迷宫只有两条路呢? 62 00:04:20,420 --> 00:04:25,038 如果 Hedge 复制两个自己, 走入错路的复制体将被毁灭。 63 00:04:25,038 --> 00:04:27,757 另一个复制体会抵达神器, 64 00:04:27,757 --> 00:04:32,457 并用无线电发回其路径信息, 不需要考虑其他路径, 65 00:04:32,457 --> 00:04:34,858 那就是 Hedge 接收到的答案。 66 00:04:34,858 --> 00:04:38,438 这就是 “递归的基本情况”。 67 00:04:38,438 --> 00:04:41,778 现在,假设迷宫由起点分为两支, 68 00:04:41,778 --> 00:04:44,760 在每个分支的节点 Hedge 进行自我复制 —— 69 00:04:44,760 --> 00:04:47,620 我们称为 分支 1 和 分支 2—— 70 00:04:47,620 --> 00:04:52,627 它们继续进行复制, 得到 叶片 1 至叶片 4, 71 00:04:52,627 --> 00:04:54,777 三条分支会被摧毁。 72 00:04:55,747 --> 00:04:59,863 到达神器的那条路径 将传回正确答案, 73 00:04:59,863 --> 00:05:01,843 但只回传给父级。 74 00:05:01,843 --> 00:05:05,723 如果分支 1 或 2 在节点等待 75 00:05:05,723 --> 00:05:07,713 并从无线电收到回传信息, 76 00:05:07,713 --> 00:05:11,273 即从其所在位置 通往神器的正确道路。 77 00:05:11,273 --> 00:05:14,563 要从分支的角度 告诉 Hedge 正确答案, 78 00:05:14,563 --> 00:05:17,003 分支会报告自己走过的路径, 79 00:05:17,003 --> 00:05:20,603 以及刚从无线电收到的路径信息。 80 00:05:20,603 --> 00:05:25,393 不管迷宫分支多少次, 同样的过程都会奏效, 81 00:05:25,393 --> 00:05:28,353 复制体在无线电上接收到的答案 82 00:05:28,353 --> 00:05:31,653 必然是从它的位置到控制室的路径, 83 00:05:31,653 --> 00:05:34,003 然后,如果加上它走的分支, 84 00:05:34,003 --> 00:05:37,223 也就能告诉父级 如何从它的位置到控制室。 85 00:05:37,223 --> 00:05:39,313 在这次名为“探路者”的行动中, 86 00:05:39,313 --> 00:05:44,353 我们总结出 Hedge 的每个复制体 需要遵循的指令如下: 87 00:05:44,353 --> 00:05:46,643 1. 如果到达神器地点, 88 00:05:46,643 --> 00:05:50,737 通过无线电告知父级 选左边或右边的路径。 89 00:05:50,737 --> 00:05:54,567 2. 到达节点后,离开传送带, 90 00:05:54,567 --> 00:05:58,547 并向左右两条路发送复制体。 91 00:05:58,547 --> 00:06:00,827 让它们各自运行“探路者”, 92 00:06:00,827 --> 00:06:02,867 这就是递归的过程, 93 00:06:02,867 --> 00:06:07,961 在最终指令触发前,这个过程 可能会发生很多次。最终指令是: 94 00:06:07,961 --> 00:06:12,948 3. 如果无线接收到任何信息, 都应当传递回父级—— 95 00:06:12,948 --> 00:06:16,577 不管你走左边还是右边的路 到达你所在位置, 96 00:06:16,577 --> 00:06:19,427 然后重复刚接收到的一切信息。 97 00:06:19,427 --> 00:06:23,423 ”探路者“是程序员调用函数、 98 00:06:23,423 --> 00:06:26,113 子程序或过程的一个例子。 99 00:06:26,113 --> 00:06:29,503 不管用什么术语来形容, 其本质都是一样的—— 100 00:06:29,503 --> 00:06:34,297 这只是一组带有标签的指令, 可以方便地重复使用—— 101 00:06:34,297 --> 00:06:36,607 甚至可以被其自身调用。 102 00:06:36,607 --> 00:06:39,583 在我们的案例中, 这一方法将非常有效—— 103 00:06:39,583 --> 00:06:44,813 仅仅使用三条指令 就能映射出整个路径网络。 104 00:06:46,257 --> 00:06:47,887 这就是接下来所发生的事情: 105 00:07:09,760 --> 00:07:15,537 在巡逻队正要经过拐角时, Ethic 和 Lemma 及时伪装了自己。 106 00:07:15,537 --> 00:07:19,657 她们试图迷惑机器人, 以便为 Hedge 争取时间, 107 00:07:31,473 --> 00:07:36,251 终于,Hedge 的无线电响起, 收到了正确路径信息。 108 00:07:36,251 --> 00:07:40,101 他们三个跳上了传送带, 109 00:07:40,101 --> 00:07:43,821 逃离了紧追不舍的一队机械守卫。