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小时内删除。
发表评论