我最近一直在玩 Clojure,但我无法让这个算法工作:
(defn reverse-number [number reversed]
(if (= number 0)
reversed
(reverse-number (/ number 10)
(+ (rem number 10) (* reversed 10)))))
我应该这样称呼它(reverse-number 123 0)
,我期望的结果是:321
. 当我运行它时,REPL 只是挂起。
有人可以解释一下,发生了什么,我做错了什么以及如何让这个功能工作?
注意:我知道我可以使用字符串函数来反转一个数字。实际上,我已经这样做了,但我对这个解决方案不感兴趣。我想要的只是飞跃到函数式语言。这就是我尝试多种方法的原因。
使用字符串函数:
(defn reverse-number [n]
(Integer. (clojure.string/reverse (str n))))
(reverse-number 123) ; --> 321
我不喜欢这个版本,因为使用 reverse 的字符串版本感觉像是在作弊。