我正在使用Clojure 1.5.1.这是我的计划:
(def bricks4
(memoize (fn [n]
(cond (> 0 n) 0
(= 0 n) 1
(= 1 n) 1
:else (+ (bricks4 (- n 1))
(bricks4 (- n 2))
(bricks4 (- n 3))
(bricks4 (- n 4)))))))
Run Code Online (Sandbox Code Playgroud)
(blocks4 70)抛出异常:
ArithmeticException integer overflow clojure.lang.Numbers.throwIntOverflow (Numbers.java:1388)
Run Code Online (Sandbox Code Playgroud)
我很困惑,因为我认为Clojure会自动将数字从Integer推广到Long再到BigDemical.
我该怎么做才能修复这个程序?
自1.2以来,Clojure并没有自动升级到bigint,这就像......三年前?这些天,默认为获得更好的性能,但是你可以通过使用获得自动推进的行为+',而不是+,*'不是*,等等.