这是正在尝试的代码
(defun f (a n)
(if (zerop n)
1
(* a (f a (- n 1)))))
(f 3)
应返回 27,(f 4)
应返回 256
我尝试使用两个变量,但这违反了规则。
是否可以通过递归仅使用一个变量?
感谢您的任何想法
最佳答案
我不懂 CL,但我知道 Clojure 和其他使用递归的语言。
如果递归函数有 1 个参数充当累加器,但仅在第一次调用时设置,则解决此问题的典型方法是将 f
包装在另一个函数中。有两种(基本上相同的)方法可以做到这一点:
(defun g (a n)
(if (zerop n)
1
(* a (g a (- n 1)))))
(defun f (n)
; I'm assuming you want the initial value of "a" to be 1
(g 1 n))
或者,更简洁地说:
(defun f (n)
(let (g (fn (n)
(if (zerop n)
1
(* a (g a (- n 1))))))))
; Instead of f being recursive, f calls g, which is recursive
(g 1 n))
请原谅任何语法错误。
关于Lisp递归平方使用一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42346945/