Задача о "счастливых билетах" реккурентно
Задача: "Вычислите количество N-значных счастливых билетов. Билет называется счастливым, если сумма первой половины его цифр равна сумме другой его половины"
Я смог решить эту задачу итерационно, однако на сайте http://www.ega-math.narod.ru/Quant/Tickets.htm нашел рекуррентный способ и попытался его реализовать:
#include <iostream>
#include <cmath>
using namespace std;
long long int recur_sm(long long int K, int n)
{
if (K < 0) return 0;
else if (n == 1 && K < 10) return 1;
else
{
long long int temp = 0;
for (int i = 0; i < 10; i++) temp += recur_sm(K - i, n - 1);
return temp;
}
}
int main()
{
int N;
cin >> N;
long long int summ = 0;
for (long long int k = 0; k <= 9 * N / 2; k++)
{
long long int c = recur_sm(k, N / 2);
summ += c * c;
}
cout << "SUMMA: " << summ << endl;
return 0;
}
Но при N >= 4 выдает ошибку переполнения стека. Хотел знать, это ошибка моего кода, или комп не рассчитан на такую глубокую рекурсию?