【发布时间】:2020-05-21 07:40:52
【问题描述】:
我制作了这个尾递归函数来计算平方根:
sqrt x n a = if n == 0 then a else sqrt x (n - 1) (a + x/a)/2
由于某种原因,当 n 大于 1 时,它会给出错误的结果,这意味着当它被要求改进近似 a 时,不止一次。随着 n 的增长,它返回一个越来越接近 0 的数字。我尝试以不同的方式实现相同的递归公式,如下所示:
sqrt x n = if n == 0 then 1 else (a + x/a)/2 where a = sqrt x (n - 1)
sqrt x = 1:map (\a -> (a + x/a)/2) (sqrt x)
而且一切正常。这只是第一个不起作用的示例,我不知道为什么,尽管我尝试了很多。
【问题讨论】:
-
除法应用于
sqrt的结果。
标签: haskell square-root