1. 排列的问题。
本文中的排列有一个前提:被排列的对象是不能有重复的。因为在本文的叙述中并没有考虑到重复的情况。请读者自己处理。
这类问题一般都是这样的:
有一个序列,不重复,希望得到这个序列的全排列。
考虑,一个只有两个元素的序列,如AB,只有两个排列,AB,BA。因为AB已经给出,所以我们只要求BA就可以。
所以对于任意多个元素的序列,我们可以他们分成两个部分,对于第一种已经给出,所以我们只要求第二中排列就可以了。
但是问题并不是这么简单。对于全排列来讲,每个部分分割的元素不同都会引起排列的变化,因此要首先找出组合,每个组合将产生一类新的排列。因此,排列问题将被这样处理:
假设序列中有N个元素,选择其中的m个,进行分割
排列(待排列序列)
{
while(选取一个组合 (n,m))
{
while(组合(n,m)中的一个排列)
{
排列 (组合(n,m-1))
}
}
}
可以看到,对于这种方法有一个问题:不能同时对(n,m)和(n,m-1)进行递归。因此,我们选择m=n-1,那么选取的组
递归方法的使用之一 -- 用递归进行排列组合
最新推荐文章于 2022-10-09 08:00:00 发布