11.3.4 使用递归替代计数器

在前一节中描述的 triangle 函数也可以使用递归方式编写。它的代码如下:

(defun triangle-recursively (number)
  "返回从1到NUMBER(包括NUMBER)的数字之和,使用递归。"
  (if (= number 1)                    ; 再做一次测试
      1                               ; 然后部分
    (+ number                         ; 否则部分
       (triangle-recursively          ; 递归调用
        (1- number)))))               ; 下一步表达式

(triangle-recursively 7)

你可以通过评估这个函数来安装它,并通过评估 (triangle-recursively 7) 来尝试它。(记得把光标放在函数定义的最后一个括号之后,注释之前。)这个函数的值为28。

为了理解这个函数的工作原理,让我们考虑当函数的参数值为1、2、3或4时发生的各种情况。