逻辑运算符可以使用尾递归

时间:2013-11-30 21:01:14

标签: recursion scheme lisp sicp

(define (fast-prime? n times)
  (cond ((= times 0) true)
        ((fermat-test n) (fast-prime? n (- times 1)))
        (else false)))

此代码来自 SICP ,第1.2.6章。该过程使用尾递归,因此在计算时它不会导致线性递归,换句话说它是迭代 。如果我使用或/和而不是 cond 重写过程,是否会导致线性递归

(define (fast-prime? n times)
  (or (= times 0)
      (and (fermat-test n) (fast-prime? n (- times 1)))))

1 个答案:

答案 0 :(得分:4)

andor的右侧是尾部表达式(请参阅R5RS section 3.5),因此您可以安全地将它们用于迭代目的。