Home > Database > Mysql Tutorial > body text

程序员面试宝典8.2典型递归问题

WBOY
Release: 2016-06-07 15:31:28
Original
1140 people have browsed it

今天看书看到8.2的递归问题,自己试了一下书上的代码,感觉尚有很多bug,于是自己写了一个。 主要是书中代码只是为了递归而递归,在递归的返回处理上做的不好。 贴上自己修改过的代码,仅作为日后复习之用。。 写程序时候发现几个问题,要注意: 1.一定要为v

今天看书看到8.2的递归问题,自己试了一下书上的代码,感觉尚有很多bug,于是自己写了一个。

主要是书中代码只是为了递归而递归,在递归的返回处理上做的不好。

贴上自己修改过的代码,仅作为日后复习之用。。

写程序时候发现几个问题,要注意:

1.一定要为vector**printarr=new vector*[slen];中申请的指针数组初始化,而初始化时,使用(*p+i)不能作为左值,改用p[i]即可。。

2.发现问题:使用*(*p+i)=i;赋值,调用时只能用指针+偏移值的方式,使用数组方式调用出错,如*p[i],而使用数组方式赋值,则只能使用数组方式调用。尚不明白是不是编译器的问题,留待学习。


#include
#include
#include
#include
using namespace std;

//建立比较串s在被比较串p中位置的vector。
void PrintfArrary(char* pstr,char* sstr,vector** printarr,int plen,int slen,int pstartnum,int sstartnum)
{


    for(int i=sstartnum;i         for(int j=pstartnum;j            if(*(sstr+i)==*(pstr+j))
            (*printarr[i]).push_back(j+1);
}

//递归调用,构建序列。
void printseq(vector** printarr,int slen,vector*out,int sum){
   if(slen==0){
     for(vector::iterator i((*out).begin());i!=(*out).end();i++)
        cout        cout    }


   else
     {
         int i=sum-slen;
         if(i){
            for(vector::iterator j((*printarr[i]).begin());j!=(*printarr[i]).end();j++){
                if(*j>*((*out).end()-1)){
                    (*out).push_back((*j));
                    printseq(printarr,slen-1,out,sum);
                    (*out).erase((*out).end()-1,(*out).end());
                }
            }
         }
         else
         for(vector::iterator j((*(*printarr)).begin());j!=(*(*printarr)).end();j++){
                    (*out).push_back((*j));
                    printseq(printarr,slen-1,out,sum);
                    (*out).erase((*out).end()-1,(*out).end());
         }
   }
}

//初始化及传递数据。
void  ConnectSequence(char* pstr,char* sstr)
{
    int plen=strlen(pstr);
    int slen=strlen(sstr);


    vector** printarr=new vector*[slen];
    for(int i=0;i

       printarr[i]=new vector;
   }
    vector*out=new vector;
    PrintfArrary(pstr,sstr,printarr,plen ,slen,0,0);
    printseq(printarr,slen,out,slen);
}


int main(){
 char* a="abdbccab";
 char* b="abc";
 ConnectSequence(a,b);
 return 0;
}

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template