Can anyone please explain what will be the output of the given below recursive function.

Please explain it in very detail with recursion tree.

```
set of vectors P.
void f(set S,vector v){
if(S is empty){
insert v into P;
return;
}
for(i = n to 1){
if(i in S){
v.push_at_back(i);
//append
f(S\{i},v);//S\{i} is S after removing i
v.pop_from_back();
//erase last element
}
}
}
```