我的理解是尾递归是不需要返回值来完成操作的递归;也就是说,递归是函数的最后一步,一旦进行递归调用,函数的其余部分就完成了。
对此,我问这个例子(来自 Norvig 先生)是否是尾递归:
(defparameter *titles*
'(Mr Mrs Miss Ms Sir Madam Dr Admiral Major General)
"A list of titles that can appear at the start of a name.")
(defun first-name (name)
"Select the first name from a name represented as a list."
(if (member (first name) *titles*)
(first-name (rest name))
(first name)))
一旦 finalfirst-name
作为语句的一个分支被调用,if
该函数就不再做任何其他事情了;因此,它是尾递归吗?