我的快速排序代码适用于的N(列表的大小)的一些值,但对于大的值(例如,N = 82031)由OCaml的返回的错误是:异常STACK_OVERFLOW用于递归函数大整数
Fatal error: exception Stack_overflow.
我做错了什么?
由于OCaml不支持大值的递归函数,我应该创建一个迭代版本吗?
let rec append l1 l2 =
match l1 with
| [] -> l2
| x::xs -> x::(append xs l2)
let rec partition p l =
match l with
| [] -> ([],[])
| x::xs ->
let (cs,bs) = partition p xs in
if p < x then
(cs,x::bs)
else
(x::cs,bs)
let rec quicksort l =
match l with
| [] -> []
| x::xs ->
let (ys, zs) = partition x xs in
append (quicksort ys) (x :: (quicksort zs));;
在我的顶部,我会补充说她也可以使用List.partition,而不是重新定义自己的。 stdlib的分区是尾递归的,而她的不是 – ghilesZ
谢谢!我会尝试! –