#include <stdio.h>void swap ( int &a, int &b ) { int t = a; a = b; b = t;}void permsrec ( int n, int *temp, int level ) { if ( level == n ) { // terminate recutsion and print out for ( int i=0; i<n-1; i++ ) printf ( "%i, ", temp[i] ); printf ( "%i \n", temp[n-1] ); return; } // level is a parting index in temp: on the left there are // used numbers, on the right, free numbers for ( int i=level; i<n; i++ ) { // move number i from the right to the left, then recurse swap ( temp[level], temp[i] ); permsrec ( n, temp, level+1 ); // when done, undo the operation swap ( temp[level], temp[i] ); }}void perms ( int n ) { int *temp = new int[n]; for ( int i=0; i<n; i++ ) temp[i] = i; permsrec ( n, temp, 0 ); delete [] temp;}void main ( ) { perms ( 4 );}