【发布时间】:2013-09-15 11:17:21
【问题描述】:
我尝试使用以下尾递归函数解决Euler Problem 2:
(defun fib (num)
(labels ((fib-helper (num a b)
(cond ((or (zerop num)
(eql num 1))
a)
(t (fib-helper (decf num)
(+ a b)
a)))))
(fib-helper num 1 1)))
(defun sum-even-fib (max)
(labels ((helper (sum num)
(cond ((oddp num) (helper sum (decf num)))
((zerop num) sum)
(t (helper (+ sum (fib num))
(decf num))))))
(helper 0 max)))
现在,当我尝试使用函数打印结果时
(defun print-fib-sum (max dir file)
(with-open-file
(fib-sum-str
(make-pathname
:name file
:directory dir)
:direction :output)
(format fib-sum-str "~A~%" (sum-even-fib max))))
max 的值为4000000,我得到了错误
("bignum overflow" "[Condition of type SYSTEM::SIMPLE-ARITHMETIC-ERROR]" nil)
来自*slime-events*。有没有其他方法可以处理号码并打印到文件中?
【问题讨论】:
-
编译算法后大约需要 60 分钟(几分钟的错误-我定期监视
top)。 -
看SDS的答案,然后重读问题。我已经在文本中链接了它。
-
谢谢,会的,我一直在将术语与值混合在我的方法中。
标签: lisp stack-overflow tail-recursion bignum