猫史档案馆


【教程帖】算法入门 四、非尾递归

用户:5KQA5KQA查看:7 回复:2 评论:7 创建时间:2020-05-17T22:34:42


说好做非尾递归,就做非尾递归(滑稽)

尾递归就是递归出现在尾部,而非尾递归的话递归不出现在尾部

center_image

发现了吗?非尾递归的递归出现在中间。那么scratch是如何执行非尾递归的呢?

center_image

非尾递归一定需要有一个递归终止条件。否则……就是个喵循环

本人研究非尾递归好长时间发现scratch居然是这样执行的:

当递归时,一直循环直到递归终止条件为true,接着继续执行下方程序

否则:非尾递归=尾递归

这个停止脚本响应不到下方程序我也不知道scratch为什么会这样执行……

最后再说明几点:虽然尾递归完全可以用循环代替,当尾递归较强大时,使用递归更合适。非尾递归更不是省油的灯,通常使用在复杂程序中,并且很难用循环代替。当然如果你的电脑中程序多了,用递归可能会卡爆你的电脑,因为递归比循环执行速度慢,占用的内存多,效率自然也会下降。

拓展一下:因为递归执行速度慢,需要有一些手段让执行速度快一点。有两种方法,第一种是打开加速模式。

center_image

或按住【SHIFT】同时点击绿旗即可打开。

第二种更常用,就是运行时不刷新

center_image

勾选它可以将运行速度加快(经测试,勾选它不会提升运算速度),但是有一个缺点就是它会影响“并等待”类积木,如果有“并等待”类积木会不起作用

还有一种方法这里就不再详细介绍了:“加速重绘”

emotion_编程猫_加油


回复

上一页1 页 / 共 1下一页
CHN_流星CHN_流星

萌新求问:递归怎么做?

点赞0


评论


小洲L6Jf小洲L6Jf

scratch

点赞0


评论