小弟我自己想的一道难题,题目的描述很简单,请高手抽1分钟看看

我自己想的一道难题,题目的描述很简单,请高手抽1分钟看看
写一个函数,能打出从1到n的所有排列(是排列,不是组合)

比如
    fun(3);

就打出
123
132
213
231
312
321

我自己也想了很久,没有答案,不知道有没有高手能给出代码。

------解决方案--------------------
////////////////////////////////////
//c++ 的递归实现
class CPermute{
private :
int m_num,m_total,*m_arr;

void init(int n){if( n <= 0 ) return; m_num=n;m_total=0;
m_arr = new int[n];
for(int i=0;i <m_num;i++) m_arr[i] = i+1;
}
void destroy(){delete []m_arr;m_arr = NULL;m_num = m_total = 0; }
void PrintPermute(){
printf( "NUM %d = ",m_total);
for(int i=0;i <m_num;i++) printf( "%d ",m_arr[i]);
printf( "\n ");
}
void Permute(int k){
#define EXCHANGE(x,y) do{int temp = x;x = y;y = temp;}while(0);
if( k> = m_num-1 ){m_total++;PrintPermute();return;}
Permute(k+1);
for(int i=k+1;i <m_num;i++){
EXCHANGE(m_arr[k],m_arr[i]);
Permute(k+1);
}
}
public:
CPermute():m_num(0),m_total(0),m_arr(NULL){}
~CPermute(){destroy();}

void Calc(int n){init(n);Permute(0); destroy();}
};

void main()
{
CPermute Permute;
Permute.Calc(5); //5的全排列
}
//////////////////////////////////////////////////////
//结果:
NUM 1 = 1 2 3 4 5
NUM 2 = 1 2 3 5 4
.......................
NUM 118 = 5 3 1 4 2
NUM 119 = 5 3 2 4 1
NUM 120 = 5 3 2 1 4
Press any key to continue