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 ; }
总结:递归实现一般包括递归部分和递归结束部分,这类问题主要是要找准递归结束条件。