練習問題 3.7
(* 練習問題 3.7 *)
(* x は実数、n は ゼロ以上の整数として、x の n乗 を計算する pow(x,n)を
以下の2通りで定義しなさい。*)
(* 1) 計算中に pow の(再帰)呼び出しをn回伴う定義 *)
(* 2) 計算中の pow の(再帰)呼び出しが約 log2n 回ですむ定義 *)
(* ヒント:x の 2n乗 = (xの2乗)のn乗 ですね。では、xの(2n+1)乗は? *)
let rec pow (x, n) =
let rec interpow (n, res) =
if n = 1 then res
else
interpow (n-1, res *. x)
in
interpow(n, x);;
(* TEST *)
let test1 = pow(2., 3) = 8.;;
let test2 = pow(3., 3) = 27.;;
let rec pow2 (x, n) =
if n = 1 then x
else
pow2(x, n-1) *. x;;
let test3 = pow2(2., 3) = 8.;;
let test4 = pow2(3., 3) = 27.;;
let rec pow3 (x, n) =
if n = 1 then x
else
if n mod 2 = 0
then pow3 (x *. x, n / 2)
else pow3 (x *. x, (n-1) / 2) *. x;;
let test5 = pow3(2., 3) = 8.;;
let test6 = pow3(3., 3) = 27.;;
関連