一个递归函数通常包含一个条件表达式,该表达式有三个部分:
递归函数可能比其他类型的函数简单得多。实际上,当人们首次开始使用它们时,它们经常看起来如此神秘简单,以至于难以理解。就像骑自行车一样,阅读递归函数定义需要一定的技巧,起初很难,但后来似乎很简单。
有几种常见的递归模式。一个非常简单的模式如下:
(defun name-of-recursive-function (argument-list) "documentation…" (if do-again-test body… (name-of-recursive-function next-step-expression)))
每次评估递归函数时,都会创建它的一个新实例,并告诉它要做什么。参数告诉实例要做什么。
参数被绑定到下一步表达式的值。每个实例以不同的下一步表达式的值运行。
下一步表达式中的值在再次执行测试中使用。
由下一步表达式返回的值被传递给函数的新实例,该实例评估它(或它的某些转化)以确定是否继续还是停止。下一步表达式被设计成当函数不再需要重复时再次执行测试返回false。
再次执行测试有时被称为停止条件,因为它在测试为false时停止重复。