gpt4 book ai didi

Lisp递归平方使用一个变量

转载 作者:太空宇宙 更新时间:2023-11-03 18:46:37 25 4
gpt4 key购买 nike

这是测试代码

(defun f (a n)
(if (zerop n)
1
(* a (f a (- n 1)))))

(f 3) 应该返回 27,(f 4) 应该返回 256

我尝试使用两个变量,但这是违反规则的。

是否可以使用递归只使用一个变量?

感谢任何想法

最佳答案

我不懂 CL,但我懂 Clojure 和其他使用递归的语言。

如果递归函数有 1 个参数作为累加器,但仅在第一次调用时设置,典型的解决方法是将 f 包装在另一个函数中。有 2 种(基本相同的)方法可以做到这一点:

(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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com