相关疑难解决方法(0)

在Clojure中递归反转序列

我想在不使用reverse函数的情况下反转Clojure中的序列,并以递归方式执行此操作.

这是我想出的:

(defn reverse-recursively [coll]
  (loop [r (rest coll)
         acc (conj () (first coll))]
    (if (= (count r) 0)
      acc
      (recur (rest r) (conj acc (first r))))))
Run Code Online (Sandbox Code Playgroud)

样本输出:

user> (reverse-recursively '(1 2 3 4 5 6))
(6 5 4 3 2 1)
user> (reverse-recursively [1 2 3 4 5 6])
(6 5 4 3 2 1)
user> (reverse-recursively {:a 1 :b 2 :c 3})
([:c 3] [:b 2] [:a 1])
Run Code Online (Sandbox Code Playgroud)

问题:

  1. 有没有更简洁的方法来做到这一点,即没有循环/重复?
  2. 有没有办法在循环中不使用"累加器"参数的情况下执行此操作?

参考文献:

什么是在Java中递归反转字符串的最佳方法?

http://groups.google.com/group/clojure/browse_thread/thread/4e7a4bfb0d71a508?pli=1

recursion clojure

8
推荐指数
2
解决办法
9085
查看次数

标签 统计

clojure ×1

recursion ×1