以下是用C语言设计的递归算法生成n个元素{'r1...rn'}的全排列的示例代码:

#include <stdio.h>

void swap(char *x, char *y) {
    char temp;
    temp = *x;
    *x = *y;
    *y = temp;
}

void permute(char *str, int start, int end) {
    int i;
    if (start == end) {
        printf('%s\n', str);
    } else {
        for (i = start; i <= end; i++) {
            swap((str + start), (str + i));
            permute(str, start + 1, end);
            swap((str + start), (str + i)); // revert back to original string
        }
    }
}

int main() {
    char str[] = '123';
    int n = strlen(str);
    permute(str, 0, n - 1);
    return 0;
}

该代码采用递归的方式生成全排列。函数permute用于生成全排列,其中start表示当前排列的起始位置,end表示当前排列的结束位置。当start等于end时,表示已经生成了一个完整的排列,将结果打印出来。否则,从startend的每个位置都尝试填入一个元素,并递归地生成剩余元素的全排列。生成完当前位置的全排列后,需要将位置start和位置i的元素交换回来,以便继续生成其他排列。

main函数中,定义了一个字符串str,并通过调用permute函数来生成全排列。

C语言递归算法实现字符串全排列

原文地址: https://www.cveoy.top/t/topic/fzfB 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录