使用c语言递归实现字符串的全排列

一、介绍

递归两个基本要素:
1.边界条件(递归出口)

确定递归何时终止

2.递归模式(递归体)

大问题如何分解为小问题

二、递归实现字符串全排列

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);//回到之前的状态
                printf("之后:%s,start:%d,i:%d\n",str);
                 printf("循环:%d\n",i);
            }
        }
    }else{
        printf("字符串长度不够!");
    }
}
//主函数入口
int main()
{
   char s[]="123"; //定义的字符串
   pernutation(s,0,strlen(s));//调用递归函数
   return 0;
}

2.运行结果


递归展示结果.png

三、分析

可见和栈是一样一样的。

四、总结

你现在所遭受的灾祸,都是你过去某个时间段慵懒所造成的。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容