order数组是栈指针,利用栈指针将递归问题转化为回溯的非递归问题
#include<stdio.h>
#include<iostream>
using namespace std;
int getCombine(int*a,int* order,int m,int n)
{
while(1)
{
int flag=0;
for(int i=1;i<=n;i++)
{
if(i==n)
{
if(order[i]==m)
order[i]=order[i-1]+1;
else
order[i]++;
}
else
{
if(order[i]==(m-n+i))
{
while(i<=n)
{
order[i]=order[i-1]+1;
i++;
}
}
else
{ if(order[i+1]==(m-n+i+1))
order[i]++;
}
}
}
for(int j=1;j<=n;j++)
{
if(order[j]!=(m-n+j))
{
flag=1;
break;
}
}
for(int j=1;j<=n;j++)
cout<<a[order[j]];
cout<<endl;
if(flag==0)
break;
}
}
int main()
{
int m,n;
cin>>m>>n;
int *a;
int *order;
a=new int(m+1);
order=new int(n+1);
for(int i=1;i<=m;i++)
{
a[i]=i;
}
for(int i=1;i<=n;i++)
{
order[i]=i;
}
order[n]=n-1;
getCombine(a,order,m,n);
return 0;
}