Тема: Функція Акермана
Можливо зробити функцію Акермана не рекурсивно, а циклічно ? Складність з якою я зіткнувся полягає в тому що не можливо написати цикл тобто
A(0, n) = n + 1;
A(m, 0) = A(m–1, 1); при m > 0;//Потрібно безліч циклів в циклі
A(m, n) = A(m–1, A(m, n–1)); при m > 0 и n > 0.//Потрібно безліч циклів в циклі
Моя невдала спроба
int main()
{
int m, n;
cout << "Vvedit m ->";//3
cin >> m;
cout << "Vvedit n ->";//5
cin >> n;
while (1)
{
if (m == 0)
n += 1;
else
if (n = 0 && m > 0)
{
m = -1, n = 1;
if (m == 0)
n += 1;
else
if (m > 0 && n > 0)
{
if (m == 0)
n += 1;
else
if (n = 0 && m > 0)
{
m = -1, n = 1;
if (m == 0)
n += 1;
else
if (m > 0 && n > 0)
m -= 1, n -= 1;
}
m -= 1, n -= 1;
}
}
else
if (m > 0 && n > 0)
{
if (m == 0)
n += 1;
else
if (n = 0 && m > 0)
{
m = -1, n = 1;
if (m == 0)
n += 1;
else
if (m > 0 && n > 0)
m -= 1, n -= 1;
}
m -= 1, n-= 1;
}
else
break;
}
cout << m << " , " << n;
getch();
return 0;
}
А це рекурсивно (працююча)
int rec(int m, int n)
{
if (m == 0)
return n + 1;
if (n == 0)
return rec(m - 1, 1);
return rec(m - 1, rec(m, n - 1));
}
int main()
{
int m, n;
cout << "Vvedit m ->";//3
cin >> m;
cout << "Vvedit n ->";//5
cin >> n;
cout << "Vivod = " << rec(m, n);
getch();
return 0;
}