Почему этот код печатает None?

Функцию Аккермана пытались реализовать с помощью следующего кода

def A(m, n):
    if m == 0:
        return n + 1
    elif m > 0 and n == 1:
        A(m - 1, 1)
    elif m > 0 and n > 0:
        A(m - 1, A(m, n - 1))

print A(4, 5)

1 ответ

Решение

Ваша функция ничего не возвращает для 2 из 3 ветвей if заявления; только если m == 0 Вы явно возвращаете значение.

Вам также необходимо вернуть результаты рекурсивных вызовов:

def A(m, n):
    if m == 0:
        return n + 1
    elif m > 0 and n == 1:
        return A(m - 1, 1)
    elif m > 0 and n > 0:
        return A(m - 1, A(m, n - 1))

Без явного возврата функция заканчивается возвращаемым значением по умолчанию: None,

Другие вопросы по тегам