欢迎来到我的博客!天波易谢,寸暑难留。今天我们来看一下程序中经常用到的“递归函数”。
1. 什么是递归呢?感觉很难的样子!
我们先拿小故事举一个例子:庙里有个老和尚和一个小和尚,有一天老和尚对小和尚说:“从前有座山,山里有座庙,庙里有 个老和尚和一个小和尚,有一天老和尚对小和尚说:“从前有座山,山里有座庙,庙里有个老和尚和一个小和尚.........””
( 这个故事?,我可能讲到老也讲不完??,我还年轻嘞?。)
通常我们讲递归,也会拿俄罗斯套娃举例子,是一种大娃娃套小娃娃的玩具(如图1.1),娃娃里面又包含了一个娃娃,
和我们上面讲的故事很像,故事里面包含着这个故事,讲下去无穷无尽停不下来。
那“递归函数”呢就是:函数自己直接或间接调用自己本身。
2. 同学们有没有感觉到递归和循环很像呢,都是一直在重复,但我们不能让它一直重复下去,要不然就像我们小和尚的
故事一样,永远也讲不完,我们必须要给程序一个停止积木,在适当的时候停止这个循环。
我们分别用循环和递归做一个小程序体会一下。我们让小猫从1数到10。
3. 为了表现出递归的思想,我们来做一个复杂的程序体验一下,我们来做一个“雪花曲线”。
"雪花曲线"是从一个正三角形变来的,①、先画一个正三角形,把它的每一条边三等分;②、我们取三等分的中间一段
为边,向外在画正三角形,并把底边去掉;③、重复上面两步产生更多的三角形(如图3.1)。
我们认识了“雪花曲线”,那如何用程序画出来呢?我们先来分析一下。由于“雪花曲线”是从三角形变化来的,
那么我们是不是会画一条边了,剩下两条边就都可以了。我们先设置一个变量“级别”,这个变量代表我们三角
行变化的次数,“级别”为0,我们就是画一个正三角形的一条边,级别为1,我们就在正三角形边的基础上变化
一次,级别越高我们画的图形也就越复杂。(如图3.2)
我们可以从中找到规律,0级为一条直线;1级在0级(1/3长度)处向左转了60°,(1/3长度)后又向右转了
120°,(1/3长度)后又向左转了60°;2级在1级(1/3长度)处向左转了60°,(1/3长度)后又向右转了120°,
(1/3长度)后又向左转了60°.........我们找到了规律,就开始写程序了。
首先我们定义一个函数(如图3.3),其中“级别”和“边长”作为形参。然后我们编写程序的结束条件,也就是
递归的出口,让它不一直重复下去。然后我们就按照上面的规律,调用自身函数,来画下一级别的边。如图3.3
然后我们的主程序,用画笔调用这个函数,画三条边就好了。完整的程序(如图3.5)。
运行结果(如图3.6)。
今天我们认识了递归,关于递归我们可以总结为两点:
⭐ 递归就是函数自己直接或间接调用自己本身。
⭐ 使用递归我们一定要设置一个递归出口,否则就成了死循环。