所以我是lisp的新手,我对我遇到的问题感到很困惑:
(defun factorial (x)
(if (>= x 1)
(* x (factorial (- x 1)))
1))
阶乘功能可以输出3000!没问题,但是
(defun sum (x)
(if (<= x 1)
1
(+ x (sum (- x 1)))))
堆栈溢出(sum 10000)
,我正在使用clisp。
有人可以澄清为什么会这样吗?
答案 0 :(得分:3)
你的函数不是尾递归的,所以编译器(和解释器)会为每次迭代增加堆栈,最终耗尽它。
您的选项在FAQ How do I avoid stack overflow?中列举;相关的是: