【发布时间】:2016-07-20 13:44:39
【问题描述】:
我是 LISP 的新手,我正在尝试理解递归。
我知道递归需要一个 STOP 条件。在下面的代码中,您能否向我解释为什么(equal x 0) 1 是我的停止条件,因为fact(- X 1) 可以像我的第二种情况一样无限期地继续,我已将t 设置为cond 的第二行,这意味着它应该继续。
但是当我运行程序时,它运行良好。下面是我的代码(偶然发现)
(defun fact(x)
(cond
((equal x 0) 1)
(t (*(fact(- x 1)) x))
)
)
【问题讨论】:
-
如果你传递一个负数,我可以无限期地继续。
-
consequent 或 Alternative 的结果是 if 的值,最后一个表达式是返回值。在 JS 中会是这样的:
function fact(x) { return x === 0 ? 1 : x * fact(x-1);}
标签: lisp