Шаг 175.
Рекурсия на Python.
Вложенная рекурсия и снова хвостовая. Вложенная рекурсия. Функция Аккермана
На этом шаге мы рассмотрим реализацию этой функции.
Один из самых популярных примеров вложенной рекурсии - функция Аккермана, определяемая следующим образом:
n + 1, если m = 0
A(n, m) = A(m - 1, 1), если m > 0 и n = 1 (11.1)
A(m - 1, A(m, n - 1)), если m > 0 и n > 1
где второй аргумент в последнем рекурсивном условии - рекурсивный вызов. Функция растёт чрезвычайно быстро даже при малых значениях аргументов и используется для проверки способности
компиляторов оптимизировать рекурсию. В примере 11.7 приводится код функции, который совсем нетрудно реализовать.
Пример 11.7. Функция Аккермана
1 2 3 4 5 6 7 |
def ack(m, n):
if m == 0:
return n + 1
elif n == 0:
return ack(m - 1, 1)
else:
return ack(m - 1, ack(m, n - 1))
|
Архив с файлом можно взять
здесь.
На следующем шаге мы рассмотрим функцию-91 Маккарти.
Предыдущий шаг
Содержание
Следующий шаг