用于查找分区的复杂递归公式

时间:2014-04-20 22:43:33

标签: java algorithm recursion

我正在尝试使用下面的公式计算自然数的分区。该公式生成两个正数,然后两个负数,依此类推。 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 =我的代码中的计数器。

enter image description here

    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))));

        }
    } 

1 个答案:

答案 0 :(得分:0)

计数器将始终为1,因为您没有将其传递回SerialFib。此外,您需要一个基本情况,当n等于0时,它将返回1.

第一个基本案例:

if(n==0)
   return 1;

SerialFib应该有另一个计数器参数:

SerialFib(long n, int counter)

当您调用SerialFib时,它应该如下所示:

SerialFib( [your formula], ++counter);