我正在做一些功课,但我已经被困了几个小时。我确信这真的很微不足道,但在挖掘了所有可用的文档后,我仍然无法理解它。任何人都可以帮我一把吗?基本上,OCaml 编程中的练习要求使用平方算法求幂来定义函数 x^n。
我看过解决方案:
let rec exp x = function
0 -> 1
| n when n mod 2 = 0 -> let y = exp x (n/2) in y*y
| n when n mod 2 <> 0 -> let y = exp x ((n-1)/2) in y*y*x
;;
我特别不明白的是如何从 fun 语句中省略参数 n 以及为什么要将它用作与 x 匹配的变量,这与通过平方求幂的定义没有明显的联系。
这是我的做法:
let rec exp x n = match n with
0 -> 1
| n when (n mod 2) = 1 -> (exp x ((n-1)/2)) * (exp x ((n-1)/2)) * x
| n when (n mod 2) = 0 -> (exp x (n/2)) * (exp x (n/2))
;;