使用c語言遞歸實(shí)現(xiàn)字符串的全排列

一、介紹

遞歸兩個(gè)基本要素:
1.邊界條件(遞歸出口)

確定遞歸何時(shí)終止

2.遞歸模式(遞歸體)

大問題如何分解為小問題

二、遞歸實(shí)現(xiàn)字符串全排列

1.二話不說先上代碼:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

void swap(char *str,int i,int j){
    char c;
    c = str[i];
    str[i] = str[j];
    str[j] = c;
}

void pernutation(char *str,int start,int end){
    if(start<end){//end condition
        if(start+1 == end){ //每次
           printf("打印全排列:%s\n",str);
            return;
        }else{
            int i;
            for(i=start;i<end;i++){
                swap(str,start,i);//交換
                printf("之前:%s,start:%d,i:%d\n",str,start,i);
                pernutation(str,start+1,end);
                swap(str,start,i);//回到之前的狀態(tài)
                printf("之后:%s,start:%d,i:%d\n",str);
                 printf("循環(huán):%d\n",i);
            }
        }
    }else{
        printf("字符串長度不夠!");
    }
}
//主函數(shù)入口
int main()
{
   char s[]="123"; //定義的字符串
   pernutation(s,0,strlen(s));//調(diào)用遞歸函數(shù)
   return 0;
}

2.運(yùn)行結(jié)果


遞歸展示結(jié)果.png

三、分析

可見和棧是一樣一樣的。

四、總結(jié)

你現(xiàn)在所遭受的災(zāi)禍,都是你過去某個(gè)時(shí)間段慵懶所造成的。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容