Recursion - 递归
问题
排列有个成员,每个成员可以选取这种值。例如当时,排列有以下情况:
给定的值,用Recursion求排列的所有情况。
解法
BruteForce存在一个问题,外围for循环的数量固定,无法随着的改变而改变。递归可以解决这个问题。
假设排列的长度从增长到。初始化时令排列为空。
将排列的长度增加到,第个元素(唯一的元素)有种选择,即长度为的排列有个排列组合:
将排列的长度增加到,得到,元素的选择可以看作在第步的每个选择的基础上继续选择。对于可以得到个排列组合:
对于可以得到个排列组合:
显然对于第步的个排列组合,每个都可以产生个排列组合,因此第步共有个排列组合。由此可知,第步后可以得到个排列组合。
根据乘法定理可知,对于成员数量为,每个成员有个值的排列,遍历所有排列组合的时间复杂度。