我正在尝试用 Lisp解决Project Euler 问题 2 。这种递归解决方案在执行时会破坏堆栈,但我认为 Lisp(使用 clisp)会识别尾递归。这正在进入顶层。
(defun e2-problem (&optional (f1 1) (f2 1) (sum 0))
"Sum fibonacci sequence, even terms up to 4 million"
(if (> f2 4000000) sum)
(e2-problem f2 (+ f1 f2) (if (evenp f2)
(+ sum f2)
sum))
我的实现是否没有正确安排优化?我想如果我不能依赖惯用的递归,这会极大地阻碍我的 Lisp 教育。