shindayoni
@shindayoni
Студент

Рекурсивная функция F(n) и G(n). В чем ошибка?

Сама задача:

Алгоритм вычисления значения функций F(n) и G(n), где n - натуральное число, задан след. соотношениями:
F(n) = G(n - 2), если n > 2
G(n) = F(n - 1) + n, если n > 1
Чему равно значение функции от F(8)?

Мой код:
def F(n):
	if n > 2:
		return G(n - 2)

def G(n):
	if n > 1:
		return F(n - 1) + n

print(F(8))

Код ошибки, :
Traceback (most recent call last):
  File "main.py", line 127, in <module>
    print(F(8))
  File "main.py", line 119, in F
    return G(n - 2)
  File "main.py", line 124, in G
    return F(n - 1) + n
  File "main.py", line 119, in F
    return G(n - 2)
  File "main.py", line 124, in G
    return F(n - 1) + n
TypeError: unsupported operand type(s) for +: 'NoneType' and 'int'
  • Вопрос задан
  • 1826 просмотров
Решения вопроса 1
У вас не обрабатывается не совпадение с условием. Не описано что вернуть из функции и по этому при не совпадении условия функция возвращает None:
def F(n):
  if n > 2:
    return G(n - 2)

Равносильно:
def F(n):
  if n > 2:
    return G(n - 2)
  else:
    return None

Но ожидается что из функции вернется число.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
trapwalker
@trapwalker Куратор тега Python
Программист, энтузиаст
А что ваши функции возвращают по отрицательным веткам своих условий? Как вы ЭТО прибавляете?
Там же четко в сообщении сказано что присходит и в чем ошибка. Читайте же.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы