這并不是說我不明白如何找到數字的整數平方根。我知道使用 Python 和 C 找到它們的幾種方法。
只是這個演算法真的很亂我的大腦。必須用 SML 撰寫它是另一個令人頭疼的問題。
請幫助我理解這個演算法。請注意,這應該使用遞回:
?? 的整數平方根是整數 ??,使得 ??2≤??<(?? 1)2。整數平方根可以使用以下歸納程序計算:
- 遞回計算 ?? = ?? div 4 的整數平方根 ??。然后我們有 ??2≤??<(?? 1)2。
- 因為 ?? 和 ?? 是整數,所以我們有 (?? 1)≤(?? 1)2。因此我們有 (2??)2≤4??≤??<4?? 4≤(2?? 2)2。
- 因此我們有??的整數平方根是2??或2?? 1。
撰寫與上述演算法對應的遞回 ML 程式。
uj5u.com熱心網友回復:
描述中缺少的部分是所謂的遞回基本情況。這是微不足道的,但有必要指定:0 的整數平方根為 0。通過使用當前值的四分之一(整數除法)重復遞回,您最終將得到該基本情況。
我不精通 SML,但我相信它應該是這樣的:
fun intSquareRoot 0 = 0
| intSquareRoot n =
let
val m = n div 4
val i = intSquareRoot m
val k = 2 * i 1
in
if k * k <= n then k
else k - 1
end;
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/426860.html
下一篇:如何在JMeter中實作遞回?
