Java 求分区的复递归公式
我试图用下面的公式计算一个自然数的分区。该公式生成两个正数,然后生成两个负数,依此类推。当P(n)<0时停止,例如Java 求分区的复递归公式,java,algorithm,recursion,Java,Algorithm,Recursion,我试图用下面的公式计算一个自然数的分区。该公式生成两个正数,然后生成两个负数,依此类推。当P(n)
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))));
}
}
代码:
公共静态长序列fib(长n)
{
长指数=0;
双前;
长计数器=1;
ex=数学功率(-1,计数器-1);
指数=(长)ex;
if(n<0)
{
返回0;
}
其他的
{
返回SerialFib((指数*(n-((计数器*((3*计数器)-1))/
2) )+SerialFib((指数*(n-((计数器*((3*计数器)+1))/2));
}
}
计数器将始终为1,因为您没有将其传递回SerialFib。此外,还需要一个基本情况,当n等于0时,它将返回1
第一个基本情况:
if(n==0)
return 1;
SerialFib应具有计数器的另一个参数:
SerialFib(long n, int counter)
调用SerialFib时,它应该如下所示:
SerialFib( [your formula], ++counter);