我迷失了以下代码试图计算平方根。 代码是:
(defn tempsqrt [x p i]
(if (< i 2)
p
(tempsqrt x (+ (/ x (* 2 p)) (/ p 2)) (- i 1))))
(defn mysqrt [x]
(let [i 10
p (/ x 5)]
(tempsqrt x p i)))
当我在逆时针方向执行(msqrt 1)
时,似乎我得到一个无限循环,因为我必须强行停止处理。
我试图在i
中输出p
和mysqrt
并且它们似乎计算得很好,我认为某处肯定会有一些愚蠢的问题,但我无法找到它
答案 0 :(得分:0)
在我的机器上按预期工作。
boot.user=> (defn mysqrt [x]
#_=> (let [i 10
#_=> p (/ x 5)]
#_=> (tempsqrt x p i)))
#'boot.user/mysqrt
boot.user=> (defn tempsqrt [x p i]
#_=> (println i)
#_=> (if (< i 2) p
#_=> (tempsqrt x (+ (/ x (* 2 p)) (/ p 2)) (- i 1))))
#'boot.user/tempsqrt
boot.user=> (mysqrt 1)
10
9
8
7
6
5
4
3
2
1
19323349832288915105454068722019581055401465761603328550184537628902466746415537000017939443193837284332679428868611117710999636580698761476491418202290083264324580207274376284652360489310800028152901586154293130345674316605555829428921442625537/19323349832288915105454068722019581055401465761603328550184537628902466746415537000017939416378221424447485229720561121299307381621967120291704662755167195820796520060180422680903764155503944648089185213182191422837908692712415936561623430457345