在 clojure v1.6.0 中,这段代码会永远运行并消耗 100% 的一个核心:
(defn average [x y] (/ (+ x y) 2))
(defn improve [guess x]
(average guess (/ x guess)))
(defn sqrt-iter [guess x]
(sqrt-iter (improve guess x) x))
(sqrt-iter 1 4)
我希望它会抛出一个StackOverflowError
立即,但事实并非如此。
有什么解释为什么会发生吗?
因为1是long。代码开始计算极长的有理数,并在几次迭代后减慢速度。如果您使用 1.0 和 4 运行它,它会在几千次调用后非常快地耗尽堆栈(可能会根据您的 jvm 参数而有所不同)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)