欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

利用递归实现全排列算法

程序员文章站 2024-03-18 09:11:46
...

研究了一个下午递归实现全排列算法,总算明白了一些东西,我觉得其实更多考验的是对于递归的掌握程度,自己对递归了解的也不多,导致学习上有些难度。
下面为一个示例代码:利用代码实现对字符串"abcd"的全排列打印

#include<stdio.h>
#include<stdlib.h>
void perm1(char ch[],int k,int m){
    int i;
    if(k==m){
        for(i=0;i<=m;i++){
            printf("%c ",ch[i]);
        }
        printf("\n");
        return;
    }else{
        for(i=k;i<=m;i++){
            char c=ch[k];
            ch[k]=ch[i];
            ch[i]=c;
            perm1(ch,k+1,m);
            c=ch[k];
            ch[k]=ch[i];
            ch[i]=c;
        }
    }
}
int main()
{
    char ch[]="abcd";
    perm1(ch,0,3);
    system("pause");
    return 0;
}


自己也花了一个图梳理思路,如下(仅以a开头为例,其他类似):
利用递归实现全排列算法
在这之前写了一个交换函数

void swap1(char a,char b){
    char c=a;
    a=b;
    b=c;
}

来简化代码,但是却运行不了,我也不知道为什么,哪位大佬看出问题麻烦提示一下,谢了。

相关标签: C语言