Получение TypeError для функции ackermann. Не уверен почему - PullRequest
1 голос
/ 06 апреля 2020
def ackermann(m, n):
    if m == 0:
        return n+1
    if n == 0:
        return (m-1,1)
    else:
        return ackermann(m-1,ackermann(m,n-1))

ackermann(10,5)

Получение TypeError:

Traceback (most recent call last):
  File "main.py", line 11, in <module>
    print(ackermann(3,4))
  File "main.py", line 9, in ackermann
    return ackermann(m-1,ackermann(m,n-1))
  File "main.py", line 9, in ackermann
    return ackermann(m-1,ackermann(m,n-1))
  File "main.py", line 9, in ackermann
    return ackermann(m-1,ackermann(m,n-1))
  [Previous line repeated 2 more times]
TypeError: unsupported operand type(s) for -: 'tuple' and 'int'

Я попытался визуализировать это на pythontutor.com, и когда m равно 9, n возвращает кортеж (9,1) и начинается ошибка.

1 Ответ

2 голосов
/ 06 апреля 2020

Когда n равно 0, вы возвращаете кортеж вместо вызова ackermann:

def ackermann(m, n):
    if m == 0:
        return n+1
    if n == 0:
        return ackermann(m-1,1)
        # Here-^
    else:
        return ackermann(m-1,ackermann(m,n-1))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...