Я сделал эту хвостовую рекурсивную функцию для вычисления квадратных корней:
sqrt x n a = if n == 0 then a else sqrt x (n - 1) (a + x/a)/2
По какой-то причине он дает неверный результат, когда n больше 1, то есть когда его спрашивают для улучшения приближения, а, более одного раза. Возвращает число, которое становится все ближе и ближе к 0 при увеличении n. Я пытался реализовать одну и ту же рекурсивную формулу различными способами, например так:
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)
И все это прекрасно работает. Это только первый пример, который не работает, и я не могу понять почему, сколько бы я ни старался.