0
(defun fact (n)
    (do
       ((i 1 (+ 1 i))
        (prod 1 (* i prod)))
       ((equal i n) prod)))

我已经完成了上面的代码,当我尝试时fact(4),它给了我ans is 6。我不确定出了什么问题。谁能帮我?

4

2 回答 2

3

改成

(defun fact (n)
    (do
       ((i 1 (+ 1 i))
        (prod 1 (* i prod)))
       ((equal i (+ n 1)) prod)))

基本上,你做的迭代比必要的少。

于 2012-07-12T09:29:51.803 回答
3

米海已经给出了答案。

我会把它写成:

(defun fact (n)
  (do ((i    1 (+ 1 i))
       (prod 1 (* i prod)))
      ((> i n) prod)))

Common Lisp 具有所有适用于数字的常用算术谓词:=, <, >, ...

于 2012-07-12T10:43:32.017 回答