递归算法初探

  在学习欧立奇的《程序员面试宝典》一书的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直接中断循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值