递归函数即自调用函数,在函数体内部直接或间接地自己调用自己,即函数的嵌套调用是函数本身。通常在此类型的函数体之中会附加一个条件判断叙述,以判断是否需要执行递归调用,并且在特定条件下终止函数的递归调用动作,把目前流程的主控权交回上一层函数执行。因此,当某个执行递归调用的函数没有附加条件判断叙述时,可能会造成无限循环的错误情形。

    函数递归调用最大的好处在于可以精简程序中的繁杂重复调用程序,并且能以这种特性来执行一些较为复杂的运算动作。例如,列表,动态树型菜单及遍历目录等操作。相应的非递归函数虽然效率高,但却比较难编程,而且相对来说可读性差。鼓励用递归函数实现程序思想。一个简单的递归调用如下所示:

113953700.jpg

    在上例中声明了一个test()函数,该函数需要一个整型的参数。在函数外面通过传递整数10作为参数调用test()函数。在test()函数体中,第一条代码输出参数的值和两个格。然后判断条件是否成立,成立则调用自己并将参数减1再次传入。开始调用时,他是外层掉内层,内层调更内层。知道最内层条件不允许必须结束。最内层结束了,输出“<-->”作为分界符,执行调用后的代码输出参数的值和两个空格,它就会回到稍外一层继续执行,稍微一层再结束时,退到再稍微一层继续执行,层层退出,直到最外层结束。执行后的结果就是我们上面所看到的。递归函数有点儿像电影《盗梦空间》的剧情模式,我(高洛峰)猜想编剧以前有可能和我们是同行。