11.3.4 用递归代替计数器

上一节介绍的 triangle 函数也可以用递归实现,如下:

(defun triangle-recursively (number)
  "Return the sum of the numbers 1 through NUMBER inclusive.
Uses recursion."
  (if (= number 1)                    ; do-again-test
      1                               ; then-part
    (+ number                         ; else-part
       (triangle-recursively          ; recursive call
        (1- number)))))               ; next-step-expression

(triangle-recursively 7)

你可以执行该函数进行安装, 然后执行 (triangle-recursively 7) 测试。 (记得把光标放在函数定义最后一个括号后面、注释前面。) 函数执行结果为 28。

要理解这个函数的工作方式, 我们分别看参数为 1、2、3、4 时会发生什么。