#python #recursion #math
#python #рекурсия #математика
Вопрос:
Я попытался использовать определение из Википедии для гиперопераций и перевести его в код Python. Моя цель состояла в том, чтобы сделать ее читаемой, сделать ее быстрой было задачей на потом. Вот определение, которое я использовал, а ниже — мой код.
из Википедии: https://en.wikipedia.org/wiki/Hyperoperation#Definition
А теперь вот мой код:
def hyperation(n, a, b):
if n == 0:
return b 1
if n == 1 and b == 0:
return a
if n == 2 and b == 0:
return 0
if n >= 3 and b == 0:
return 1
return hyperation(n-1, a, hyperation(n, a, b-1))
Когда я попробовал это с гиперацией (n = 1, a = 3, b = 3), что в принципе должно быть таким же, как
3 3
Я всегда достигаю предела рекурсии, независимо от того, насколько высоко я его установил.
Когда вы пытаетесь сделать это на бумаге вручную, это работает отлично. И во время отладки я не мог понять, что происходит. Спасибо за любую помощь!!!
Комментарии:
1. Я бы сказал, что это ошибка где-то в другом месте. Я копирую вашу функцию и выполняю ее с помощью print(hyperation(1,3,3)), и это работает
2. Пожалуйста, не редактируйте свой вопрос таким образом, чтобы сделать недействительными существующие ответы. Вместо этого вы можете задать новый вопрос для новой проблемы.
Ответ №1:
В вашей последней строке return
отсутствует ключевое слово.
Комментарии:
1. Вау, спасибо. Хотя вы правы, и это была ошибка, она все еще не работает. Спасибо за вашу помощь.
Ответ №2:
Во-первых, ваш код был неправильно отформатирован, потому что python — язык, чувствительный к отступам.
Во-вторых, последняя строка журнала ошибок указывает, что ошибка заключается в добавлении NoneType и int . Вы ничего не вернули в последнем else
блоке, так что это вернет NoneType . Просто добавьте return
в начале последнего предложения.
В-третьих, вы можете удалить все elif
после return
и просто использовать if
.
Комментарии:
1. Спасибо за вашу помощь, неправильная идентификация была опечаткой, которую я сделал только в StackOverflow. Пропущенный возврат был на самом деле тихим тупым сбоем, но после его исправления новая проблема, как показано в отредактированном вопросе, заключается в том, что моя программа не заканчивается и всегда достигает предела рекурсии, независимо от того, насколько высоко я его установил. В любом случае спасибо за вашу помощь!