Я пытаюсь найти разделы с цифрами формулу Эйлера для этого:Partition на основе формулы Эйлера
Это дает результаты, как:
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;
}
a) Не используйте float point для решения +/-. (-1)^n с натуральным числом n равно 1, если n четное, else -1 – deviantfan
b) Возврат 0, если 'n <= 0' не' n <0' – deviantfan
Это должно быть <0, так как если n == 0 это означает n = 1. См. Ниже, где я определил его. – user3017335