This is the end of the recursion.

Method Permutation_Method calls itself so there must be a end of recursion condition. If it would not be there, the result would be an endless call (not endless but until stack overflow fatal error).

for(i = k; i <= m; i++) // why i=k ?

The start of the recursion call (first call to Permutation_Method) is with k = 0, which means, start with the first character in the string (array of characters).

Than swap the two characters at position k and i (which does nothing at the first call).

Next call with k=1.

Again k = i, nothing ist done in the first m rounds of recursion.

When they are ready, condition k = m, than another round starts, now with k always k = i + 1, and than

always character at positon i and k = i + 1 and in the new call of Permutation_Method with k + 1, swapping

character i and k+2, and so on.

Result is some kind of permutaion of all characters in the string. The exact permutation is not easy

to oversee for me without debugging the code, so I would insert Console.Write(list); at before and after

Permutation_Method (list, k+1, m);

just to see how list evolves.

Hope it helps,

Oli