谁能帮我解决这个问题?
(define f (lambda (x)
(cond
((null? x) 0)
(#t (+ (* (car x) (car x)) (f (cdr x)))))))
我不明白这个函数是不是尾递归? 如果是,原因是什么?
最佳答案
它不是尾递归,因为函数在返回之前做的最后一件事是计算 (+ ...)
。为了尾递归,返回之前的最后一个操作必须是递归调用。
使函数尾递归通常涉及一个带有累加器参数的辅助函数:
(define f0 (lambda (x acc)
(if (null? x)
acc
(f0 (cdr x) (+ acc (* (car x)(car x)))))))
(define f (lambda (x)
(f0 x 0)))
关于lisp - 尾递归函数与否,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17934515/