1. 案例目的
这篇教程将带你轻松搞懂递归的奇妙思想!我们会学习如何用简单的代码让程序“自己调用自己”,从而画出各种复杂又漂亮的分形图案。教程还会结合经典又有趣的“Turtle”海龟绘图,让你亲眼看到编程的神奇和乐趣——快来一起试试吧!

2. 使用材料

3. 软件平台
4. 理论知识
递归原理:
大事化小,小事一样做 把一个大问题拆成几个“更小、但长得像”的小问题,然后这些小问题再用同样的方法去拆解。
一定要喊停,不然会没完没了 递归不能无限拆下去,必须有一个“停下来的条件”。比如拆到无法再拆的最小问题时,就直接给出答案,不再继续。
举例:一个电影院的“传话”故事
想象你在一个黑漆漆的电影院里,想知道自己坐在第几排。
你的动作: 你拍了拍前面那排人的肩膀,问:“哥们,请问这是第几排?”
递归发生: 前面那个人也不知道,于是他也拍了拍他前面的人…… 这个过程一直持续下去。
临界点(出口): 直到问到了第一排的人。第一排的人一看前面没座儿了,很确定地回答:“我是第一排!”
结果回传:一直到第一排告诉第二排:“我是1。”
第二排心想:“哦,那我是1 + 1 = 2。” 然后告诉第三排。
信息就这样一排排传回来,最后你得到了答案。
这就是递归: 你把一个大问题(我要知道我是第几排),拆解成一个个一模一样的小问题(问前面的人),直到碰到一个不需要计算就知道答案的人(第一排),然后再把结果一层层收回来。
科赫雪花
你有没有发现,真正的雪花放大之后,边缘并不是光滑的,而是弯弯曲曲、越来越细碎?
数学家科赫在1904年就想:能不能用一条简单的规则,画出一片无限复杂的雪花?
于是,他发明了“科赫雪花”——一个用递归“长”出来的神奇图形。
绘制规则:
第 0 步:先画一个等边三角形。
第 1 步:每条边分成三段,把中间一段“凸”出一个小三角形。
第 2 步:对新的每一条边再做同样的操作。
第 3 步:继续重复……边会越来越多,图形越来越像精致的雪花。

海龟绘图积木:
把“Turtle”想象成一个拿着自动铅笔的小机器人,你写“行走计划”,它就负责照做,边走边画。
- 抬笔与落笔:你可以把海龟想象成自己手里拿着一支画笔。当笔尖落在画布上时,你只要移动手,就能画出五彩斑斓的线条——这就是落笔。海龟也是一样:落笔后,它每走一步都会留下痕迹。那什么时候需要抬笔呢?比如你画完一段线,想把画笔移到另一个位置重新画,又不想让移动的路线留下乱七八糟的痕迹,这时候就可以把笔尖抬起来,悄悄走过去,再落笔继续画。


- 前进:这个积木是控制海龟移动最重要的命令。你只需要在它的参数框里填入一个数字,这个数字的单位是像素点(屏幕上最小的距离单位)。像素点的数值直接决定了画笔痕迹的长度——比如你填
10,海龟就会向前移动 10 个像素点,画出一条 100 像素长的线段。

旋转:这个积木用来改变海龟当前的朝向,也就是它下一步前进的方向,你需要填入一个数字,单位是角度(°)。
填入正数(如
90),海龟会顺时针旋转对应角度。填入负数(如
-90),海龟会逆时针旋转对应角度。注意:这个积木只改变方向,不会移动海龟,也不会画出任何线条。

- 画笔精准移动:如果你已经知道画笔要去的位置(比如屏幕上某个点的 x 和 y 坐标),就不需要使用“前进”一步一步走着过去。直接用这个积木,输入目标位置的 x 值和 y 值,海龟就会快速移动到那里

- 颜色更改:可以通过下面两个积木进行背景颜色更改与画笔颜色调整。


5. 绘制一棵分形树
- 添加积木库:想不想让小海龟听从你的指令,在屏幕上画出各种有趣的图形?很简单!在“MicroBlocks”编程环境里,只要进入左侧的“图形与显示”分类,找到“海龟库”这个模块,点击“添加积木库”,你的小海龟就准备好动笔啦!



- 小试牛刀:想不想画出像雪花、树杈那样神奇的分形图案?别急,我们先从最简单的开始——用海龟绘图画一个等边三角形。别看它简单,这可是你迈向“分形大师”的第一步哦!一起来试试吧!
先选一支你喜欢的画笔颜色吧!为了让画出来的图案既好看又居中,我们可以先把小海龟挪到屏幕中间的位置,然后再让笔尖落下,准备开画!

画等边三角形其实很简单:
让小海龟先向前走一段,画出一条边;
然后旋转 120°,再继续走一条边;
把“走边 + 旋转”这两个动作重复执行 3 次,一个漂亮的等边三角形就完成啦!


- 递归分形树:
接下来,我们来画一棵会“自己长分叉”的神奇树——分形树。
仔细观察,它的生长规则其实很简单:
第 0 步:先画一根笔直的主干,就像树干一样。
第 1 步:在主干的最顶端,向左、向右各画一根稍短的树枝。
第 2 步:把每一根新长出来的树枝,都当成一根“小主干”。重复刚才的动作——在它们顶端再分两根更短的树枝。
第 3 步:重复上面这几步,分叉越来越多,越来越细…… 只要这样重复几次,一棵枝繁叶茂的树就神奇地出现啦!
是不是很像在变魔法?这种“自己调用自己”的规则,在编程里就叫递归。别怕名字吓人,跟着步骤一步步画,你也能轻松画出一棵分形树!

在使用“递归”这个方法之前,最重要的一步是什么?
先想好什么时候停下来!
就像前面“电影院”的例子一样——你必须确定在某个条件下,能直接得到答案,不再继续往下问。
如果不设定停止条件,递归就会一直没完没了地运行下去,最后电脑和机器人都会“卡住”不动,就像掉进了无限循环的迷宫里一样出不来。
观察这棵分形树,你会发现:每分叉一次,新长出的树枝都会比原来的更短。
所以,我们可以给递归设定一个停止条件:当树枝的长度小到某个值(比如小于 5)时,就不再继续分叉了。
另外,和“电影院例子”一样,递归到了最底层不能只是“停下”,还得把结果传回来(绘制最后一个分支并返回)。
因此,我们需要自己建一个“自定义积木”,在里面写清楚:
:

PS:在递归中,“返回 0” 这个积木非常重要。它的作用是:结束当前这一层的调用,回到上一层,让整个递归过程能够顺利地“一层层收回来”。当然,不用“返回 0”也可以实现同样的效果。你可以直接用 “如果…否则…” 结构来写。
接下来,我们就把整棵分形树画出来啦!步骤是这样的:
画主干:先让小海龟向前走,画出当前长度的主干。
画左侧分支:把画笔向左转一个角度,然后用更短的长度画出左边的树枝。
画右侧分支:把画笔再向右转(两个角度),画出右边的树枝。
别忘了回退:画完左右分支后,小海龟还停在分叉的顶端,需要把它原路退回到分叉点,并且转回原来的方向,这样才能继续让上一级的递归正常返回。

完整的积木定义如下,两种方式均可以:


在编写主程序时,我们可以先给小海龟安排一个落笔位置:
把画笔放在屏幕下方的某个地方,然后用 “面向-90度”(也就是朝上)积木让它抬起头来。这样画出来的树就能一路向上生长,有足够大的空间伸展枝丫,不会挤在屏幕中间啦!:

6. 尝试绘制科赫雪花
前面我们说过,科赫雪花的绘制规则是:把每一条线段三等分,再在中间一段上“凸起”一个小山包。
如果一直这样分下去,线段的长度会越来越短,分叉的“层数”会越来越多。
因此,在自定义积木里,我们需要两个输入:
长度(当前线段的长度)
层数(还剩多少次“细分”机会)
递归的终止条件就是: 当层数 = 0 时,不再细分,直接画一条长度为“长度”的直线。

在科赫雪花的递归中,深度决定了我们“分几次”把直线变出锯齿,长度决定了当前线段有多长
为什么深度每次要 -1?
想象你在玩“剥洋葱”游戏: 每剥掉一层,洋葱就小一圈,剩下的层数也少一层。 画科赫雪花也一样:每画一层(做一次“三等分→凸起”), 剩下的“细分次数”就少一次。 所以下一次调用时,深度 = 深度 - 1。 当深度变成 0,就说明“剥完了”,不用再细分,直接画直线就好啦!
为什么长度每次要除以 3?
还记得吗?科赫雪花的魔法是: 把 1 条线段 变成 4 条小线段,每条小线段的长度只有原来的 1/3。 就像一根 30 厘米的吸管,你把它剪成 3 等份,中间那段拱起来,就变成了 4 段 10 厘米的小吸管。 所以下一次递归时,每一小段的长度就是 长度 ÷ 3。 一层一层这样除下去,线段越来越短,锯齿越来越密,雪花就越来越漂亮!详细步骤如下:
画科赫曲线(长度/3,深度-1)
左转 60°
画科赫曲线(长度/3,深度-1)
右转 120°
画科赫曲线(长度/3,深度-1)
左转 60°
画科赫曲线(长度/3,深度-1)

PS:
左转 60° 和右转 120° 恰好构成一个等边三角形的两个边(外角 120° 等于两次 60° 转向)。
最后再左转 60° 是为了恢复海龟的原始方向,这样画下一段时不会偏。
我们已经做好的“画科赫曲线”积木,就像搭好了一片雪花的一片“小羽毛”。但别忘了,一片完整的雪花需要 3 条这样的边哦!所以,在主程序里,我们要重复调用 3 次这个积木,每画完一条边,就让小海龟右转 120°,换一个方向画下一条边。三条边首尾相连,一朵漂亮的科赫雪花就绽放在屏幕上了:

以上所有的代码参考示例: