# Avoiding "side effects" in recursive functions

I am writing a function to find the intersection between two sets.

The non-functional requirements of the assignment include avoiding "side effects".

function intersection(a, b) {
return helper(a, b, []);
}

function helper(a, b, c) {
if (a.length == 0) {
return c;
}

if (b.contains(a[0])) {
return helper(a.slice(1, a.length), b, c.concat([a[0]]));
}

return helper(a.slice(1, a.length), b, c);
}


Would mutating the argument c in the above code be considered a side effect?

The specific assignment is written in OCaml, so, though the above example is in an imperative language, I want to stay true to the spirit of functional programming.

Please don't provide any alternate solutions to the problem.

If the helper function mutated the object c (which concat doesn't do in JS), then helper would have that side effect. But overall your intersection function wouldn't have any side effect that I can see, as the c array doesn't exist outside of it.
PS: concat returns a new array every time. The original c array is unchanged.