从前有座山,山里有座庙,庙里有个老和尚和小和尚。老和尚对小和尚说:“从前有座山,山里有座庙,庙里有个老和尚和小和尚。老和尚对小和尚说:从前有座山,山里有座庙,庙里有个老和尚和小和尚。老和尚对小和尚说:……”
这是一个古老的童谣,故事可以一直讲下去,陷入一种无限循环。程序设计中的递归也是如此,递归调用是函数内部调用自身的过程。递归必须要有结束条件,否则会进入无限递归状态,永远无法结束。
1.递归函数
例如,求解n的阶乘。
n的阶乘等于n×(n-1)!,可以采用递归函数实现。设计递归函数三部曲:
(1)函数名和参数
可以定义递归函数名为fac(),因为要求解n的阶乘,因此需要设计一个参数n。
(2)递归的结束条件
递归的结束条件即递归的出口,通常是特殊情况或者递归到最末端直接可解的情况,如果没有这部分,递归可能会出现死循环,永远无法结束。本题中0和1的阶乘均为1,直接返回1。
(3)自调用
在函数内部调用自身,调用自身时函数名相同,参数类型、数量、顺序也相同,参数值通常不同。本题中n! = n × (n - 1)!,(n