我必须在OCamlpartitions: int -> int
中编写一个函数,该函数计算将严格正整数n
写成严格正整数之和的方法的数量。我设法编写了一个函数,返回将n
写成k
整数之和的方法的数量,但我不能对所有k
都这样做。下面是我的代码:
let rec partition n k =
match k with
| k when k > n -> 0
| k when k = n -> 1
| 1 -> 1
| _ -> (partition (n-1) (k-1)) + (partition (n-k) k);;
let partitions n =
let result = 0 in
for i = 1 to n do result = result + i done; result;;
我的功能partition n k
正在工作,但我的功能partitions n
(我必须做的)不是…
谢谢你的帮助!
我注意到@NathanFallet提供的partitions
函数循环中的第一个调用是针对k = 0
的。您可以通读代码,看看当k = 0
.
(提示:您的partition
函数不适用于这种情况。这是相当合理的,因为你不能通过将0个数字相加得到正数。
尝试使用这个分区功能:
let partitions n =
let result = ref 0 in
for i = 1 to n do result := !result + (partition n i) done; !result;;
我用ref替换了result,以便能够改变它的值,然后我对每个I的分区数求和,从1到n,对于n,并返回这个和