我迷失於下面的代碼,試圖計算平方根。 的代碼是:讓用法調用另一個函數
(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
,他們似乎計算得很好,我認爲一定有一些愚蠢的問題,但我無法找到它。
可能是一個輸入錯誤 - 你的函數名是'mysqrt',但是你調用的函數是'msqrt'。 ???我認爲它一定是這樣的,因爲你遞歸地調用'tempsqrt'而不是使用'recur'強制執行尾部調用,所以*如果* tempsqrt在無限遞歸循環中被調用,你的棧會在你的顯示器上吹大塊。 (可愛的想法,呃?:-)很清楚(至少在我的腦海中清楚)'tempsqrt'沒有被調用。當然,我可能是錯的 - 但我試過你的代碼,它對我來說工作得很好。祝你好運。 –
我一定是某種錯字,我已經重寫了一切,現在它奇蹟般的工作。感謝大家! – user263416