let rec generate start n = if start = 0 then match n with | 0 -> raise (Invalid_argument "n") | 1 -> [[1]] | k -> let result = generate 1 k in [k]::result else if start < n then (let result = ref [] in for i = start to n - start do let tmp_result = generate i (n - i) in let tmp_result_i = List.map (fun lst -> i :: lst) tmp_result in let tmp_result2 = tmp_result_i @ !result in result := tmp_result2 done; !result ;) else [[n]];; let generate_partitions n = generate 0 n ;; generate_partitions 1 ;; generate_partitions 2 ;; generate_partitions 3 ;;
Friday, February 6, 2015
Generate Partitions
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment