48-递归和自制积木(函数)- 青少年编程Scratch四级准备

Scratch 少儿编程 2029浏览 0评论
少儿编程Scratch01

友情提示:视频教程观看时请手动设置清晰度。

1

递归前言

    递归是一种很有意思的程序。一个函数中可以调用函数本身,这就是递归。递归需要有明确的边界,到达边界以后,这个递归就结束调用、返回结果,否则就进入“死循环”了。递归的功能和循环类似,但多数时候递归的性能并不好,有很多额外的开销,但在一些情况下,能够让代码变得更为简洁,但通常没有循环那么直观。

    因为Scratch四级是最后一个级别的考试,递归肯定是会被考察到。题库肯定要“嘚瑟一下”,表示Scratch中也是编写递归程序的。但多为选择题或判断题,通过阅读递归程序,了解计算结果。编程题中是不大可能要求使用递归实现的,因为这个级别的考试中,递归基本上都可以转化成循环来实现。

    这里我们举两个简单的例子,看看Scratch中是怎么实现递归操作的。第一个例子中,同时用循环做了一遍,运行三百万次加法以后,循环的性能比递归要高一倍。

2

递归-加法

用递归实现加法计算。要求从1+2+3+4+5+6+….+N, N为10,得数是多少?

同样的加法,测试一下做300万次,计算机需要运行多少时间。

然后用循环做一遍,同样做300万次,看需要多少时间。比较一下递归和循环的能差异。

48-递归和自制积木(函数)- 青少年编程Scratch四级准备

    计时器也是考试内容之一。因此这里使用计时器,记录程序的运行时间。

    开始的时候,将数字n设置为10,加总的得数为0,然后加总计算,10次。做完以后,显示时间。这里的加总计算是一个“自制积木”,就是Scratch中的函数。

自制积木-函数

48-递归和自制积木(函数)- 青少年编程Scratch四级准备

    这是递归的关键。函数很简单,只有一个输入参数“数字n”,然后判断如果数字n大于0,就加总到得数中。做完后,数字n减去1,然后再调用积木自身。这就构成了递归了。

    第一次数字为10,加入到得数中,然后传递9到这个函数中,9也会被加入到结果中,依次类推,到1进入函数的时候,还是满足条件,还是会被加总到总数中。然后减掉1,即为零,不满足条件,后面的就不执行了。因此10+9+8+7+…+2+1 =55

递归-结果

48-递归和自制积木(函数)- 青少年编程Scratch四级准备

结果为55,正确。

3

循环-加法

现在我们使用循环做一遍。要求还是一样:1+2+3+。。。。+N。

循环

48-递归和自制积木(函数)- 青少年编程Scratch四级准备

这其实比递归要好理解多了。从1加到10,做10次,每次都将当前数加入到结果中,然后减去1,继续做。循环次数是固定的,所以很好理解。

运行结果也是55,和递归做出来的结果相同。

4

机器性能测试

还是上面的程序,我们让系统从1+2+3,一直加总到300万。看看机器需要使用多少时间。

大递归-机器性能测试

48-递归和自制积木(函数)- 青少年编程Scratch四级准备

参数n设置为300万即可。设置成千万级的时候,Scratch编辑器已经被白屏了,无法继续执行了。三百万还行。循环的,来个几千万,也没问题,很轻松。大循环中,使用300万。

运行结果-性能差异

48-递归和自制积木(函数)- 青少年编程Scratch四级准备

左边13秒是递归实现的。右边7秒是循环实现的。循环加总,三千万,花了75秒。三千万的递归,在这个i5,8GB内存的机器上,已经跑不出来结果了。

48-递归和自制积木(函数)- 青少年编程Scratch四级准备

3000万的递归,已经把Scratch Desktop跑白屏了。可能是这个软件的问题,内存和CPU都没有被占用,就挂在某个地方了。

5

用递归旋转或改变角色大小

    循环和递归都可以实现这个功能。这往往是判断题。运行一段递归或循环程序后,角色的大小变成多少了,或者旋转到哪个角度了。

48-递归和自制积木(函数)- 青少年编程Scratch四级准备

我要变变变这函数中,使用递归开始的时候面向上方0度,然后逐渐增加。180°为边界,大于180时,停止全部脚本,就不再转动了,否则就会继续转动。

判断题:运行结束后,小猫朝着180°?

自家广告:指导着指导着自己的小孩学习scratch编程,结果我自己写了一本书。本人的Scratch专著《零基础学Scratch 3.0少儿编程》预计将在2020年出版。到时,欢迎购买。如果需要青少年编程机器人的私教培训陪练,请留言。

 

2020年8月9日

微信订阅号:ABO_CRM

北京

转自公众号:
艾博特

您必须 登录 才能发表评论!