scratch数字之谜——认识递归

在编写程序中,递归往往能给我们带来非常简洁非常直观的代码,从而使我们的编码大大简化,同时学习递归思想可以非常好地培养我们逆向思维习惯。通过递归算法解决问题具有以下几个特点:

  • 递归就是方法里调用自身。 (或者叫函数中调用自身)
  • 在使用递增归策略时,必须有一个明确的递归结束条件,称为递归出口。

我们通过一个绘图例子来直观理解一下递归算法吧

画出简易递归正方形

绘图要求:要求画出一个边长为10的正方形,然后以这个正方形的一个角为起点,沿着同样的方向继续画出正方形,每次边长增加10,但边长最大不能大于或等于110,画出这样的图形。

首先我们用自己熟悉的变量和循环来完成它:

file

同学们可以非常轻松地理解这个程序,但如何通过递归来实现呢?

我们回忆下原来学过的Scratch中的函数,我们将画出正方形定义为一个函数,如果在边长小于110时,函数不断调用自身,每次调用时边长增加10。

file

“使用递归算法好像并没有多大帮助,感觉和使用循环和变量差不多呀!”

是的,这个例子还不能很好得表现出递归的思想和特点,我们来画出一个更加复杂的递归正方形来体验下:

file

在这个图形中,大的正方形四个角位置画出小正方形,在小正方形的四个角位置又画出更小的正方形… …是不是很像套娃,然后里面套着的小正方形边长是它外面的大正方形边长的四分之一。

如果我们不使用递归算法来进行画图,我会需要相对复杂的代码来实现,但是使用递归算法可以让代码变的非常简洁、易懂,阅读一下上面的代码,可以理解了么?

黔西南 触摸未来
我们正身处一个只要愿意思考,就能改变世界的时代