abcd全排列递归函数
    在数学中,排列是指从一组给定的元素中选出一些元素(不重复)进行排序的操作。全排列则是指,对于一个集合中的元素,选出所有可能的排列方式。
    在计算机编程领域,要求全排列通常用于密码破解、数据加密和游戏算法中,如各种益智游戏、纷扰游戏中的篮球投篮、贪吃蛇中的随机初始位置生成等。
    下面我们来讲述一下全排列的递归函数的实现。
    1、全排列的实现方式
    全排列有多种实现方式,比如字典序法、递增进位制法、STL算法等。在本文中,我们将介绍全排列的递归实现方式。
    2、全排列递归实现
    对于n个元素全排列问题,第一步先固定第一个元素,对后面n-1个元素进行全排列,然后确定第二个元素,对其后面n-2个元素进行全排列,如此循环,直到确定第n个元素。
    具体流程如下:
    1) 将最左边的数和每一个数交换一次(包括自己)。
    2) 固定这个数,对剩下的数进行全排列(递归)。
    代码如下:
    void Permutation(char* pStr, char* pBegin)
    {
        if(*pBegin == '\0')
            printf("%s\n", pStr);
        else
        {
            for(char* pCh = pBegin; *pCh != '\0'; ++pCh)
            {
                if(*pBegin == *pCh) continue;
                swap(*pBegin, *pCh);
                Permutation(pStr, pBegin + 1);
                swap(*pBegin, *pCh);
            }
        }
    }编程递归函数
    3、函数分析
    该函数使用递归的方式实现了全排列问题。
    void Permutation(char* pStr, char* pBegin)
    pStr :表示待排列的字符数组。
    pBegin :表示当前处理的字符数组的位置。
    if(*pBegin == '\0')
        printf("%s\n", pStr);
    表示递归结束条件:当处理到字符串的末尾时,输出该字符串。
    表示循环处理pBegin位置开始(包含pBegin位置)到字符串末尾的所有字符。
    表示如果这个位置字符已经在之前处理过,就不再处理它。
    表示递归处理每一个字符的位置,同时要交换处理过的位置字符和未处理的字符,以实现全排列的结果。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。