在学习欧立奇的《程序员面试宝典》一书的P87中的程序,可以改写为下面的程序代码:
void ConnectSequence(char *p_str,char *s_str,int *print_arr,int pStartNum,int sStartNum,int printNum) { static int p_len=strlen(p_str); static int s_len=strlen(s_str); unsigned int print_arr_num=0; assert(p_str!=NULL && s_str!=NULL); if(NULL==print_arr) { cout<<"allocate error"<<endl; return; } if(printNum==s_len) { for(int i=0;i<s_len;i++) { cout<<*(print_arr+i); cout<<" "; } cout<<endl; return; } //做一个递归循环 for(int i=pStartNum;i<p_len;i++) { for(int j=sStartNum;j<s_len;j++) { if(*(s_str+j) == *(p_str+i)) { print_arr[printNum]=i+1; ConnectSequence(p_str,s_str,print_arr,i+1,j+1,printNum+1); } } } }
写递归程序需要注意的地方:1.函数的形参必须为需要保存的数据,以便return返回时候,能够读取这些临时数据 2.如果需要寻找多种可能结果,则用return,否则,可以用break直接中断循环。