Recursion - 递归


问题

排列个成员,每个成员可以选取种值。例如当时,排列有以下情况:

给定的值,用Recursion求排列的所有情况。

解法

BruteForce存在一个问题,外围for循环的数量固定,无法随着的改变而改变。递归可以解决这个问题。

假设排列的长度从增长到。初始化时令排列为空

将排列的长度增加到,第个元素(唯一的元素)种选择,即长度为的排列个排列组合:

将排列的长度增加到,得到,元素的选择可以看作在第步的每个选择的基础上继续选择。对于可以得到个排列组合:

对于可以得到个排列组合:

显然对于第步的个排列组合,每个都可以产生个排列组合,因此第步共有个排列组合。由此可知,第步后可以得到个排列组合。

根据乘法定理可知,对于成员数量为,每个成员有个值的排列,遍历所有排列组合的时间复杂度


源码

Recursion.h

Recursion.cpp

测试

RecursionTest.cpp