有人可以帮我这个吗?
(define f (lambda (x)
(cond
((null? x) 0)
(#t (+ (* (car x) (car x)) (f (cdr x)))))))
我无法理解这个函数是否是尾递归的? 如果是,那是什么原因?
答案 0 :(得分: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)))