Тема: Знайти значення функції
Знайти значення функції:
f(x,y)=
0, x<=0 or y<=0;
f(x-1,y-2)+f(x-2,y-1)+2, x<=y;
f(x-2,y-2)+1, x>y.
Вхідні дані:
Два цілих числа x, y (0 ≤ x, y ≤ 50).
Вихідні дані
Вивести значення функції f(x,y).
Вхідні дані #1
2 3
Вихідні дані #1
4
Вхідні дані #2
34 12
Вихідні дані #2
6
Мій варіант рішення:
#include <iostream>
using namespace std;
long long f(long long x, long long y)
{
if ((x<=0) || (y<=0)) return 0;
else if (x<=y) return f(x-1,y-2)+f(x-2,y-1)+2;
else if (x>y) return f(x-2,y-2)+1;
}
int main()
{
long long x,y;
cin>>x>>y;
cout<<f(x,y)<<endl;
return 0;
}
Проблема полягає в тому, що якщо зазначену функцію реалізувати безпосередньо, то навіть для невеликих значень х,y програма буде працювати довго через присутню рекурсію.
Тому програма проходить не всі тести. Як можна удосконалити рекурсивну функцію?