Understanding recursion - Pls help

Hi,

I am trying to learn how this recursive program leads to the answer that it gives.

This code creates all permutations of a string given.

It prints the answer right, but I dont understand how this work in the system memory - The logic - that it what it swaps and how.

To understand that could sm1 please layout the first few steps (in terms of memory) on how it has been done?

Code:

`#include <stdlib.h>`

#include <string.h>

#include <stdio.h>

int global = 0;

void swap(char* src, char* dst)

{

char ch = *dst;

*dst = *src;

*src = ch;

}

/* permute [set[begin], set[end]) */

int permute(char* set, int begin, int end)

{

int i;

int range = end - begin;

if (range == 1)

{

global++;

printf("set%d: %s\n",global, set);

}

else

{

for(i=0; i<range; i++)

{

swap(&set[begin], &set[begin+i]);

permute(set, begin+1, end);

swap(&set[begin], &set[begin+i]); /* set back */

}

}

return 0;

}

int main()

{

char str[] = "abcd";

permute(str, 0, strlen(str));

return 0;

}

For instance - How I understand it works is -

when permute is called -

1) Calling Permute -

set = "abcd"

range > 1 [since 4-0]

for..

swaps(a,b) ???

2) Recursion on permute(set,1,4) --is it still abcd??

range>1

swap(b,d) ???

3)Recursion on permute(set,2,4) --is it still abcd??

range>1

swap(c,d) ???

4)Recursion on permute(set,3,4) --is it still abcd??

range==1

print ??? What?

5)Now when the function returns after (4) does after permute gets called?

6) Why do we require 2 swaps and recursion in for loop?

And so on...

Thanks.

Looking fwd to your replies.