clojure - 如何在 Clojure 中进行求幂?

标签 clojure exponentiation

如何在 Clojure 中进行求幂? 现在我只需要整数求幂,但问题也适用于分数。

最佳答案

经典递归(看这个,它会破坏堆栈)

(defn exp [x n]
     (if (zero? n) 1
         (* x (exp x (dec n)))))

尾递归

(defn exp [x n]
  (loop [acc 1 n n]
    (if (zero? n) acc
        (recur (* x acc) (dec n)))))

功能性

(defn exp [x n]
  (reduce * (repeat n x)))

偷偷摸摸(也会破坏堆栈,但不那么容易)

(defn exp-s [x n]
  (let [square (fn[x] (* x x))]
    (cond (zero? n) 1
          (even? n) (square (exp-s x (/ n 2)))
          :else (* x (exp-s x (dec n))))))

图书馆

(require 'clojure.contrib.math)

关于clojure - 如何在 Clojure 中进行求幂?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5057047/

相关文章:

clojure - 在 vim 中突出显示函数体中的参数

clojure - 如果 key 存在 : update, 否则:assoc

algorithm - 实数的幂运算

Clojure : 'lein repl' history grepping?

clojure - 在 ClojureClr 中找不到 clojure.set

序言统一决议

biginteger - 是否有一种节省空间的方法来计算高指数的 gcd?

python - 以特定的 y 间隔绘制函数

go - 在 Golang 中计算大幂

algorithm - clojure中的列表处理,需要尾递归