1
Python编程从入门到实践
1.9.4.1 5.4.1 函数的递归定义
5.4.1 函数的递归定义

函数被定义,实际是将代码封装成一个程序段,可以被其他程序调用。当然,也可以被该函数内部其他语句调用。这种在函数定义中调用自身的方式称为递归。递归在数学和计算机应用方面作用非常强大,能够很简洁地解决重要问题。

数学中学习的阶乘就可以使用递归来求解。阶乘的定义如下:

为了实现这个阶乘算法,可以使用简单的循环累积。观察5!的计算,如果去掉5,就是计算4!,推广来看,n!=n*(n-1)!,实际上这个关系给出了计算阶乘的另一个算法:

这个定义是说明1的阶乘是1,其他数字的阶乘定义为这个数字乘以比它小1的数的阶乘。递归不是循环,因为每次递归都会计算比它更小数的阶乘,直到1!。1!是1,被称为递归的基例,或者称为递归头。当递归到底时,就需要一个能直接算出值的表达式。

阶乘的例子包括递归的两个关键部分:

①定义递归结束条件,就是说什么时候不再调用自身了。如果没有申明结束循环的条件,就会陷入死循环。

②递归体,也就是什么时候调用自身的方法。