剑指offer(四):递归题目 字符串字串 字符串全排列 查找输出素数及其因子

匿名 (未验证) 提交于 2019-12-02 22:59:29
版权声明:本文为博主原创文章,未经博主允许不得转载。 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; }

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!