我有以下JRuby代码:
def knuth(a, n, b)
if n ==1
r = a**b
else
r = 1
b.times do
r = knuth a, n-1, r
end
end
return r
end
k = knuth 3, 4, 5
puts k
puts k.size
但它给了我
java.lang.ArithmeticException:负指数
任何想法为什么?
我在Windows上使用jruby-9.0.0.0.pre2-p0
答案 0 :(得分:1)
这里有两件事在起作用。首先,在JVM中,所有数字都已签名。因此,当r
增长到足以使高阶位设置时,数字实际上变为负数,因此错误。第二件事是,每次通过b.times
循环r
时都会被重新分配,以便在下一次迭代中传递给r
的{{1}}的值更大,导致knuth
的新值再次大幅增加,依此类推,直到r
变为负值。