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)))))