【问题标题】:Decomposition of an integer into a sum of strictly positive integers将整数分解为严格正整数的总和
【发布时间】:2021-03-06 12:06:42
【问题描述】:

我必须在 OCaml partitions: 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(我必须做的那个)却没有……

感谢您的帮助!

【问题讨论】:

    标签: integer ocaml partition decomposition


    【解决方案1】:

    我注意到@NathanFallet 提供的partitions 函数循环中的第一个调用是针对k = 0。您可以通过代码查看k = 0 时会发生什么。

    (提示:您的 partition 函数不适用于这种情况。这是相当合理的,因为您无法通过将 0 个数字相加来获得正和。)

    【讨论】:

    • 你是对的,那么最好从 k = 1 开始
    【解决方案2】:

    试试这个为你分区功能:

    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,并返回这个和

    【讨论】:

    • 首先感谢您的回答。我已经为我的分区函数尝试了这个,但无论我选择什么整数 n,我都会收到错误“Out_of_memory”。也许我的步态不是正确的......
    • (不管怎样,如果你只是为他们写部分作业,没有讨论或解释,这对任何人来说都不是特别有帮助。)
    猜你喜欢
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 2012-03-21
    • 2013-02-14
    • 1970-01-01
    • 2014-09-18
    • 2020-05-18
    • 1970-01-01
    相关资源
    最近更新 更多