'Exception Stack_overflow for big integer in recursive functions

My Quicksort code works for some values of N (size of list), but for big values (for example, N = 82031) the error returned by OCaml is:

Fatal error: exception Stack_overflow.

What am I doing wrong?
Should I create an iterative version due to the fact that OCaml does not support recursive functions for big values?

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));;


Solution 1:[1]

Best to fix the underlying problem as noted above, but if you really need a big stack, set ulimit -s. See also:

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 KJ7LNW