递归是程序算法的一种方式,它是指程序调用自身的编程,也即是函数自己调用自己。它允许一个函数在其定义中直接或间接调用自身的一种方法。
scratch编程,使用画笔或数学运算经常会使用递归算法。最简单的举例,计算从1加到10的结果,就可以用递归来解决。如下示例,每次调用都会数字相加,并将数字减1直至数字为0,其最后输出结果保存在结果变量中。
如果输入数字10,毫无疑问,程序会计算10+9+8+…+1=55。结果就不上图了。
但是,有同学就提出了:如下这个示例,也能计算出55的结果。
它们之间的区别在于红框内的顺序。
第一个图的执行结果是10,19,27…,最后结果是55。也就是从10加到1,这很好理解,因为我们的程序就是这么设计的。
而第二个图的执行结果是1,3,6,10….,最后结果也是55。很显然是从1加到10。于是有的学生就有了疑惑。
这其实还是要从递归本身来找。第二个图中,当递归执行到数字1之后,就要执行后面的从1到10的相加计算。为什么是从1到10,而不是其他,因为这仍然在递归的函数体内。也就是要把调用自身方法之后的内容继续递归执行一遍。而此时的数字值已经是1,于是就是从1开始加。
学生们亲自尝试了程序,甚至有一个学生用javascript(一种web开发语言)进行了验证。只能说如今的孩子们知识面太宽了,10多岁的孩子,编程设计的大门永远都向你们打开。
这个世界是我们的,更是你们的!