我浏览了很多问题,但没有找到。我需要编写一个返回Permutation P(N,K)的递归方法。意思是,有20个对象的池,绘制3个,绘制它们的顺序有多少种可能性?答案是20 * 19 * 18。
这是到目前为止我得到的:
public double perm(long N, long K)
{
if (K == 1)
return N;
else
return perm((N*(N-1)), (K-1));
}
N是池,K是拉数。我的问题是弄清楚如何使“ N *(N-1)*(N-2)...”位起作用。说我这样做:
perm(10,3)
在我第一次获得代码后,N将为10 * 9或90,这意味着在第二个循环中,它将计算90 * 89,而不是(10 * 9)* 8 。我不知道这应该如何工作,但是教授指定了它,因此它必须可行。
我可以使用FOR lop轻松地做到这一点,但不能成为for循环。 我真的不想要解决方案,只是一些指导。谢谢!
答案 0 :(得分:1)
您正在使用乘法结果递归(是一个单词吗?)。
return perm((N*(N-1)), (K-1));
在这里,N *(N-1)= 90(N最初为10),因此结果为perm(90), k-1)
您应该将P(N-1,K-1)的结果与N相乘:
N * P(N-1, K-1)