递归:
有的问题在解决时,可以先做一步操作,操作后的局面是和原问题形式相同但是规模变小的新问题,由新问题的答案可以推出原问题的答案,这样的问题,就可以使用递归解决。这种情况下使用递归,会不停地缩小问题的规模,直到问题缩小到某一规模后(称为满足了某个终止条件),就无法或者不必再递归缩小其规模,而是立即求出该最小问题的解,并且再往上层层推出最初原始问题的解。
递归函数不能总是没完没了地调用自身,必须存在某种条件,该条件满足时函数就不需要调用自身,而是直接返回。
----------------------------
分析排列问题:
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
char s[10];
char res[10];
int len;
int vis[10];
//当前排列的是第k个数
void perm(int k)
{
if(k==len)
{
res[len]='\0';
cout<<res<<endl;
return;
}else{
for(int i=0;i<len;i++)
{
if(!vis[i]) //从小到大顺序找s[i]没有访问过
{
res[k]=s[i]; //先排列当前待排列数组的第一个元素
vis[i]=1;
perm(k+1);
vis[i]=0;
}
}
}
}
int main()
{
cin>>s;
len=strlen(s);
sort(s,s+len);
memset(vis,0,sizeof(vis));
perm(0);
return 0;
}