• 尾递归优化
    • recur
    • trampoline

    尾递归优化

    recur

    尾递归优化是函数式编程不能缺少的一个性能优化方案.
    没有尾递归, 常有的递归调用也会形成很深的调用栈消耗内存.
    cljs 和 Clojure 类似, 都需要通过声明 recur 进行优化.
    最终代码会被编译为 white 结构的 js 代码,从而提高性能.

    1. (defn factorial [acc n]
    2. (if (<= n 1) acc
    3. (recur (* acc n) (- n 1))))
    4. (factorial 1 10)

    trampoline

    recur 只能对当前函数进行尾递归, 如果尾递归涉及到多个函数,
    需要借助新的函数作为跳板:

    https://clojuredocs.org/clojure.core/trampoline