如何计算排列中的掉期数?

时间:2017-03-30 02:44:01

标签: java permutation

我在下面有这个代码,我想知道如何计算掉期数量。我使用了一个计数变量来计算出来,但是我得到的数字与计算机不同。我认为交换的数量是2 *(n - 1)(n - 2)......(n - n + 1)。对于n == 4,计算机得到128,我得到48.我做错了什么?

public void permute(int n) {
        if (n == 1) {
            printOutPut();
        }
        for (int i = 1; i <= n; i++){
          swap(i, n);
          permute1(n-1);
          swap(i, n);
        }
    }

1 个答案:

答案 0 :(得分:1)

代码定义了一个递归:

num_swaps(0) = 0
num_swaps(i) = i * (num_swaps(i - 1) + 2)

或更多类似数学的符号:

s_{n+1} = (n + 1) (s_n + 2)
s_0 = 0
s_1 = 2
s_2 = 8
s_3 = 30
s_4 = 128

您可以使用数学技术解决一般n的递归问题,但这会验证计算机是否正确

编辑:我试图找到一般n的解决方案,结果是wolfram alpha,并且所提供的解决方案具有不完整的伽玛函数和内容。所以,不要期望计算很简单!