版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/weixin_39087263/article/details/84500985
示例:abc的顺序子串:a ab abc | b bc | C
(1)i指向初始位置,j指向末位位置,遍历一次abc,输出,将i指针移动,一次输出,
(2)递归调用i + 1号位置
如图:
void Funstr(char *str,int m,int n) { if(m==n) { cout<<str[m]<<endl; return ; } for(int j =m;j<=n;j++) { for(int i=m;i<=j;i++) cout<<str[i]<<" "; cout<<endl; } Funstr(str,m+1,n); } int main() { char str[] = "abcd"; Funstr(str,0,3); system("pause"); return 0; }
2.递归判断一个数的素数因子
void Prim(int m) { int i =0; for(i =2;i<(m/2+1);i++) { if(m%i==0) { break; } } if(i==(m/2+1)) { cout<<m<<endl; } else { cout<<i<<'*'; Prim(m/i); } } int main() { Prim(100); return 0; }
(3)递归实现字符串的全排列
void Fun(char *str,int p, int q) { static int count = 0; if(p == q) { count++; cout << "【输出】" << str <<" 次数为"<<count<< endl; } else { for(int i =p;i<=q;++i) { cout << str; char tmp=str[i]; str[i] = str[p]; str[p] = tmp; cout << "交换(" << i << "," << p << ")之后:" << str << endl; Fun(str,p+1,q); cout << str; char tmp1=str[i]; str[i] = str[p]; str[p] = tmp1; cout << "恢复为:" << str<<"恢复了"<< endl; } } } int main() { char *str[] ="abc"; Fun(str,0,2); return 0; }