我尝试了俄罗斯农民指数的无尾递归版本,并且返回如下:
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)
但是它没有计算出正确的结果。请帮助
答案 0 :(得分:1)
提示:函数square
的类型为float -> float
,而*
是整数乘法。