我正在尝试使用下面的公式计算自然数的分区。该公式生成两个正数,然后两个负数,依此类推。 P(n)< 0一个例子是
p(3) = p(2) + p(1) = 3
p(4) = p(3) + p(2) = 3 + 2 = 5
p(5) = p(4) + p(3) - p(0) = 5 + 3 - 1 = 7
p(6) = p(5) + p(4) - p(1) = 7 + 5 - 1 = 11
*P(0) = 1 by convention
换句话说,为了计算说P(5),你必须计算P(4)等于P(3)+ P(2)和P(3)等于P(2)+ P( 1)最后 - P(0)等于1.你必须遍历每一个以找到它们相等的东西,然后求它们。因此,要查找数字的分区,您必须找到所有其他数字的分区。我已经尝试了一些东西,因为你可以看到下面的代码,但它不起作用。 k =我的代码中的计数器。
Code:
public static long SerialFib( long n )
{
long exponent = 0;
double ex;
long counter = 1;
ex = Math.pow(-1, counter - 1);
exponent = (long) ex;
if (n < 0)
{
return 0;
}
else
{
return SerialFib((exponent * (n - ( (counter * ( (3 * counter) - 1)) /
2)))) + SerialFib((exponent * (n - ( (counter * ( (3 * counter) +1))/2))));
}
}
答案 0 :(得分:0)
计数器将始终为1,因为您没有将其传递回SerialFib。此外,您需要一个基本情况,当n等于0时,它将返回1.
第一个基本案例:
if(n==0)
return 1;
SerialFib应该有另一个计数器参数:
SerialFib(long n, int counter)
当您调用SerialFib时,它应该如下所示:
SerialFib( [your formula], ++counter);