输入一个整数n,求长度为n的所有排列解决方法

输入一个整数n,求长度为n的所有排列
例如n=2,排列为:
01
10
02
20
..
98
89
n =4时 排列为:
0123
0124
0125
。。。
9875
9876
------解决思路----------------------
/**************************************
 *FILE    :D:\c\main.cpp
 *PROJECT :NULL
 *AUTHOR  :707wk
 *CREATED :2015/9/20 19:13:52
 *TEXT    :NULL
 *EMAIL   :gtsoft_wk@foxmail.com
 *CODE    :https://github.com/707wk
 *LOGO    :
               #########                       
              ############                     
              #############                    
             ##  ###########                   
            ###  ###### #####                  
            ### #######   ####                 
           ###  ########## ####                
          ####  ########### ####               
        #####   ###########  #####             
       ######   ### ########   #####           
       #####   ###   ########   ######         
      ######   ###  ###########   ######       
     ######   #### ##############  ######      
    #######  ##################### #######     
    #######  ##############################    
   #######  ###### ################# #######   
   #######  ###### ###### #########   ######   
   #######    ##  ######   ######     ######   
   #######        ######    #####     #####    
    ######        #####     #####     ####     
     #####        ####      #####     ###      
      #####      ;###        ###      #        
        ##       ####        ####              

***************************************/

#include <iostream>

using namespace std;

int * p;
int tmp[10]={0};

void funiction(int len,int index)
{
for(int i=0;i<10;i++)
{
if(tmp[i])continue;
tmp[i]=1;
p[index]=i;
if(len-index==1)
{
for(int j=0;j<len;j++)
printf("%d ",p[j]);
printf("\t");
}
else funiction(len,index+1);
tmp[i]=0;
}
}

int main()
{
int len;
    scanf("%d",&len);
p=(int* )malloc(sizeof(int)*len);
funiction(len,0);
    return 0;
}
输入一个整数n,求长度为n的所有排列解决方法