基于欧拉公式的分区函数

时间:2014-04-18 19:26:02

标签: c++ algorithm

我正在尝试使用Euler的公式找到数字的分区:

它会产生如下结果:

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 and so on..
* P(0) = 1

它产生两个正值,然后是两个负值,依此类推。

我正在使用递归,但代码进入无限循环而不产生任何结果。

long result = 0;
long counter = 0;

class Euler
{
public:
long Partition(long n)
{
    int exponent = 0;
    if (n < 0)
    {
        return 0;
    }
    else
    {
        counter = counter + 1;
        exponent = pow(-1, counter - 1) ;

        if (n == 0)
        {
            n = 1;
        }

        return Partition((exponent * (n - ( (counter * ( (3 * counter) - 1)) / 2)))) +   
        Partition(((exponent * (n - ( (counter * ( (3 * counter) + 1)) / 2)) )));
    }

}
};

int main(int argc, char** argv)
{
    long result= 0;
    long a = 3;
    Euler * obj = new Euler();
    long s = obj->Partition(a);
    std::cout << s;
    return 0;
}

1 个答案:

答案 0 :(得分:1)

第一次调用counter会修改您的全局Partition,因此第二次调用另一个counter;事实上,{{1}}或多或少地无法预测。

不要使用全局变量。