1)在调用一个函数的过程中又直接或间接地调用该函数本身,称为函数的递归调用,带有递归调用的函数也称为递归函数。递归其实包括两个过程,一个是递推的过程,函数不断调用自己知道边界。另一个是回归过程,到了边界后一层层把值返回。递推的边界也叫递推出口,我们设计递推函数时一定要有递推出口,不然会进入死循环。
2)递推函数的设计首先要找到事物存在的递推关系。我暂且下一个定义:一个事物包含跟他同概念的事物。例如一根木棍截取一部分还是一根木棍,只是长度变小了。这种包含关系也是这样,被包含的事物概念没有变化只是数量不同而已。
我们要处理一个事物的规律,我们直接按这个规律去设计,在设计的过程中我们可以直接使用我们这个还没设计完的函数(提前使用)。例如要设计个程序把一根木棍截成多截,我们可以这么想,要把木棍截成多截只需要分两步,第一步把木棍截取一截,第二步把剩下的截成多截。因为剩下的还是一个木棍那么就可以调用函数自身来处理。但是我们没法理解它怎么能自己用自己呢,其实可以理解为里面使用的是它包含的跟它同概念函数而已,由于他们都是一样的规律所以就不用再去设计一个函数了,实际上他们确实不是同一个函数,只是同概念,因为在真正执行的过程中是利用了第一个函数的规律在再运行了一个相同概念的子函数,没必要去编写n个同概念的函数。 |
|