将一个整数分解为严格正整数的和



我必须在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,并返回这个和

最新更新