我在下面有这个代码,我想知道如何计算掉期数量。我使用了一个计数变量来计算出来,但是我得到的数字与计算机不同。我认为交换的数量是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);
}
}
答案 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,并且所提供的解决方案具有不完整的伽玛函数和内容。所以,不要期望计算很简单!