Я попробовал рекурсивную версию русского крестьянства без хвоста, и она вернулась так:
let rec fast_expNTR (base, power) =
match power with
|0->1
|n-> if n mod 2=0 then fast_expNTR (square base, power/2)
else base * fast_expNTR(square base , power/2)
Но в else base*fast_expNTR(square base , power/2)
говорится, что выражение ожидается типа float, но ему присвоен тип int. Я не понимаю ошибку.
Кроме того, вот моя попытка быстрого рекурсивного построения хвоста:
let fast_exp (base , power)=
let rec helper (acc ,acc2,p)=
if p=0 then acc * acc2
else if p mod 2 =0 then helper(int_of_float (square (float_of_int acc)),acc2, p/2)
else helper(int_of_float(square (float_of_int acc)),acc * acc2, p/2)
in helper(base,1,power)
Но он не вычислил правильный результат. Пожалуйста, помогите