现在的位置: 首页 > 综合 > 正文

常见面试题——递归

2018年03月16日 ⁄ 综合 ⁄ 共 1132字 ⁄ 字号 评论关闭

1、递归将一个整数输出:如654321,输出1,2,3,4,5,6,代码实现如下:

void Reverse(int* pResult,int iOrigin)
{
    if(iOrigin/10==0)
    {
        pResult[0]=iOrigin%10 ;
        return ;
    }else
    {
        pResult[0]=iOrigin%10 ;
        Reverse(pResult+1,iOrigin/10) ;
    }
}
int main()
{
    int a=654321;
    int b[10] ;
    Reverse(b,a) ;
    for(int i=0;i<6;i++)
    {
        cout<<b[i]<<',' ;
    }
    cout<<endl ;
}

2、用递归算法实现回文检测,如abcdefggfedcba,

int JudgeBack(char *pStr,int len)
{
    if(len<=1)
    {
        return 1 ;
    }else
    if(pStr[0]==pStr[len-1])
    {
        return JudgeBack(pStr+1,len-2) ;
    }else
    {
        return 0 ;
    }
}
int main()
{
    char *pTmp="abcdefggfedcba" ;
    if(JudgeBack(pTmp,strlen(pTmp)))
    {
        cout<<"YES!"<<endl ;
    }
    else
    {
        cout<<"NO!"<<endl ;
    }
    return 0 ;
}

3、求全排列问题

void Perm(char list[],int index,int len)
{
    int i=0 ;
    char tmp ;
    if(index==len)
    {//Print
        for(i=0;i<len;i++)
        {
            cout<<list[i]<<"," ;
        }
        cout<<endl ;
    }
    else
    {
        for(i=index;i<len;i++)
        {
            tmp=list[index] ;
            list[index]=list[i] ;
            list[i]=tmp ;

            Perm(list,index+1,len) ;

            tmp=list[index] ;
            list[index]=list[i] ;
            list[i]=tmp ;

        }
    }
}
int main()
{
    char tmp[]={'a','b','c','d'} ;
    Perm(tmp,0,4) ;
    return 0 ;
}

4、分解质因数:12=2*2*3

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()
{
    int a=435234 ;
    cout<<a<<'=' ;
    Prim(a) ;  
    return 0 ;
}

总结:递归实现一般包括递归部分和递归结束部分,这类问题主要是要找准递归结束条件。

抱歉!评论已关闭.