深入浅谈之递归全排列问题

 时间:2024-10-15 04:58:45

所谓递归算法,也就是锂淅铄旰直接或间接调用自己的算法,自己调用自己的函数也就是递归函数。

递归的特点与性质:1逻辑方法不变2规模不断变小。3注意一个终止条件。

这里谈一下全排列问题,全排列对于新手来说也是比较容易理解的。

首先我们来全排列ABCD这一序列。

写一个perm方法:perm(int a[],int n,int k)

a[]:代表要排列的内容用数组存放。

n:表示要排列几个数。

k:表示当前排列的状态排列到第几个数。

逻辑方法不变:每一层都是排列

规模不断变小:排完第一个位置后排后面(n-1)个位置,依次递推。

终止条件:排到最后一个的时候(本次采用的是交换方法所以只需排到n-1就行了)

如图所示

深入浅谈之递归全排列问题

设数组a[] ={"A","B","C","D"}

详细代码如下(采用c++语言):

#include<iostream>

using namespace std;

void perm(char a[],int n , int k){

if(k==n-1){//这是终止条件因为是交换所以到n-1步的时候就等于排好了全部了。

for(int i=0;i<n;i++)

cout<<a[i]<<" ";cout<<endl;

}

else{

for(int i=k;i<n;++i)

{

int temp = a[i];//交换步骤

a[i] = a[k];

a[k] = temp;

perm(a,n,k+1);//确定排完第一个之后排接下去的(n-1)个。

temp = a[i];//排完后要复原状态

a[i] = a[k];a[k] = temp;

}

}

}

int main(){

char a[] = {'A','','c','d'};

perm(a,4,0);

return 0;}

深入浅谈之递归全排列问题

  • C#如何换肤?
  • python中如何对list中的数据进行遍历
  • SecureCRT8 + SecureFX 8.1的安装注册教程
  • 利用代理,让QQ的IP地址全世界跑
  • Zabbix Agent安装方法
  • 热门搜索
    手抄报的边框 抗震救灾手抄报 反邪教手抄报图片大全 节约用水的手抄报 走进名著手抄报内容 小学生三年级手抄报 8k手抄报版面设计图 初中手抄报图片大全 有关中秋节的手抄报 防火安全手抄报