今天花了一段时间才理解for循环内嵌递归的运行机理,看了博客http://blog.csdn.net/mikayong/article/details/51706508,其中决定加上自己的一些理解。
首先看代码`
void recur(int i,int n){
count++;
cout<<"B>";
for(i;i<=n;i++){
cout<<"I>";
recur(i+1,n);
cout<<"R>";
}//递归调用完,for循环还要继续调用,假设for循环n次,递归执行m次,则一共要调用nm次!
//也就是说,每for循环一次,要调用所有的递归一遍;for循环n次,要调用所有的递归n遍。而如果所有的递归有m次,则总共就是n*m次
}
在程序的注释已经写了一下理解。每循环一次,就要调用所有的递归执行一遍,所有有nm次。程序的输出结果使
这个for循环内嵌递归经常用于排列组合,例如字符串里字符的各种排列
题目描述
输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。
vector<string> Permutation(string str) {
vector<string>result;
if(str.size()==0)return result;
permutate(result,str,0);
sort(result.begin(),result.end());
return result;
}
void permutate(vector<string>& array, string str, int begin){
if(begin==str.size()-1){
array.push_back(str);
}
for(int i=begin;i<=str.size()-1;i++){
if(i!=begin&&str[i]==str[begin]){
continue;
}
swap(str[i],str[begin]);
permutate(array,str,begin+1);
swap(str[i],str[begin]);
}
}