ошибка Traceback в python
Мой код:
def f(n):
if n == 1:
return 1
if n == 2:
return 2
elif n > 2 and n % 2 != 0:
return 7 * n + f(n - 3) / 9
elif n > 1 and n % 2 == 0:
return 5 * n + f(n - 1) + f(n - 2) / 9
print(f(50))
при выполнении программы выдает ошибку:
Traceback (most recent call last):
File "<input>", line 12, in <module>
File "<input>", line 10, in f
File "<input>", line 8, in f
File "<input>", line 10, in f
File "<input>", line 8, in f
File "<input>", line 10, in f
File "<input>", line 8, in f
File "<input>", line 10, in f
File "<input>", line 8, in f
File "<input>", line 10, in f
File "<input>", line 8, in f
File "<input>", line 10, in f
File "<input>", line 8, in f
File "<input>", line 10, in f
File "<input>", line 8, in f
File "<input>", line 10, in f
File "<input>", line 8, in f
File "<input>", line 10, in f
File "<input>", line 8, in f
File "<input>", line 10, in f
File "<input>", line 8, in f
File "<input>", line 10, in f
File "<input>", line 8, in f
File "<input>", line 10, in f
File "<input>", line 10, in f
File "<input>", line 8, in f
TypeError: unsupported operand type(s) for /: 'NoneType' and 'int'
В чем проблема?
Ответы (1 шт):
Автор решения: n1tr0xs
→ Ссылка
А что будет, если вызвать f(0). Функция вернет None и тогда в рекурсии происходит вот что: None/9. Вам нужно определить поведение функции при входящем n меньше единицы, например так:
def f(n):
if n < 1:
return 0
if n == 1:
return 1
if n == 2:
return 2
elif n > 2 and n % 2 != 0:
return 7 * n + f(n - 3) / 9
elif n > 1 and n % 2 == 0:
return 5 * n + f(n - 1) + f(n - 2) / 9
print(f(50))
Так же непонятно для чего вам elif. Так же для чего вот эти сравнения (n > 2, n > 1, если код туда и так не должен дойти при невыполнении этих условий.
def f(n):
if n < 1:
return 0
if n == 1:
return 1
if n == 2:
return 2
if n % 2 != 0:
return 7 * n + f(n - 3) / 9
if n % 2 == 0:
return 5 * n + f(n - 1) + f(n - 2) / 9
print(f(50))
И рубрика, ставшая для меня любимой:
def f(n):
return 0 if n<1 else 1 if n==1 else 2 if n==2 else 7*n+f(n-3)/9 if n%2 else 5*n+f(n-1)+f(n-2)/9
Или так:
def f(n):
return 0 if n<1 else n if n in (1, 2) else 7*n+f(n-3)/9 if n%2 else 5*n+f(n-1)+f(n-2)/9
UPD:
Если вкратце, то функция, в которой не выполнился ни один return, делает его "сама" - return None. Для простоты представляете функции в своей голове так:
def f(x):
# ваш код с ветвлениями, циклами и еще, бог весь чем
return None # функция "сама добавляет" эту строку в конец себя.