0

任何人都可以帮我解决这个问题吗?

(define f (lambda (x)
  (cond
    ((null? x) 0)
    (#t (+ (* (car x) (car x)) (f (cdr x)))))))

我不明白这个函数是否是尾递归的?如果是,原因是什么?

4

1 回答 1

4

它不是尾递归,因为函数在返回之前所做的最后一件事是评估(+ ...)。为了尾递归,返回之前的最后一个操作必须是递归调用。

使函数尾递归通常涉及一个辅助函数,该函数接受一个累加器参数:

(define f0 (lambda (x acc)
  (if (null? x)
      acc
      (f0 (cdr x) (+ acc (* (car x)(car x)))))))

(define f (lambda (x)
  (f0 x 0)))
于 2013-07-29T21:31:54.843 回答