Вы вызываете с параметром left--
, он снова вызовет метод с тем же значением для параметра left
;только после возврата вашей функции параметр left
уменьшается на единицу.
Но это также не решит вашу проблему, вы должны указать left-1
, например:
permute(permutations, paren + "(", left-1, right);
и аналогично для правого:
permute(permutations, paren + ")", left, right-1);
left--
уменьшает значение, когда функция возвращается, что не то, что вы хотите.