Clojure中的StackOverFlow,即使在我使用bigint时也是如此
我使用下面的代码来查找阶乘Clojure中的StackOverFlow,即使在我使用bigint时也是如此,clojure,biginteger,Clojure,Biginteger,我使用下面的代码来查找阶乘 (defn factorial [x] (if (< x 2) 1N (*' (factorial (- x 1)) x))) 我看过其他问题,但他们说使用这些操作应该会给我正确的答案。那么我在这里错过了什么 我正在学习Clojure,因此这是一个学习练习。之所以出现堆栈溢出错误,是因为阶乘递归调用自身。大量的x扩展为太多嵌套的factorial调用,导致堆栈溢出 您应该重写函数以使用/而不是递归调用: (defn factorial [n
(defn factorial [x]
(if (< x 2)
1N
(*' (factorial (- x 1)) x)))
我看过其他问题,但他们说使用这些操作应该会给我正确的答案。那么我在这里错过了什么
我正在学习Clojure,因此这是一个学习练习。之所以出现
堆栈溢出错误
,是因为阶乘
递归调用自身。大量的x
扩展为太多嵌套的factorial
调用,导致堆栈溢出
您应该重写函数以使用/而不是递归调用:
(defn factorial [n]
(loop [cnt n acc 1N]
(if (zero? cnt)
acc
(recur (dec cnt) (*' acc cnt)))))
之所以出现
StackOverflowerError
,是因为factorial
递归调用自身。大量的x
扩展为太多嵌套的factorial
调用,导致堆栈溢出
您应该重写函数以使用/而不是递归调用:
(defn factorial [n]
(loop [cnt n acc 1N]
(if (zero? cnt)
acc
(recur (dec cnt) (*' acc cnt)))))