Recursion (subset)

#include
using namespace std;
void combinationUtil(int arr[], int n, int r,
int index, int data[], int i);

void printCombination(int arr[], int n, int r)
{

int data[r];


combinationUtil(arr, n, r, 0, data, 0);

}

void combinationUtil(int arr[], int n, int r, int index,
int data[], int i)
{

if (index == r) {
	for (int j = 0; j < r; j++)
		cout<<data[j]<<" ";
		cout<<endl;
	return;
}


if (i >= n)
	return;


data[index] = arr[i];
combinationUtil(arr, n, r, index + 1, data, i + 1);


combinationUtil(arr, n, r, index, data, i + 1);

}

int main()
{ int n=5;
int arr[n]={1,2,3,4,5};

int k=3;

printCombination(arr, n, k);
return 0;

}
This is the code to print all possible subsets of length k. I didn’t understand the part how the function returns to the part where it prints the subset 134 after printing the subset 125. Please explain.