Изучаю Python3. Реализовал рекурсивный алгоритм Евклида для поиска наибольшего общего делителя. Никак не пойму, почему функция возвращает None
. Что самое интересное — строка print(b)
выводит правильный результат и далее функция завершается, но результат None
def nod(a, b): if a == 0: print(b) return b elif b == 0: return a elif a > b: nod(a % b, b) else: nod(a, b % a)
Анонимный пользователь Изменен статус публикации
Любая функция в Python возвращает значение. Если вы не используете инструкцию return
явно, то функция возвращает None
.
В вашем случае ветки условия elif a > b
и else
не возвращают ничего. Отсюда и берется None
.
А вот и пример правильного, работоспособного кода (без лишнего вызова print
):
def nod(a, b): if a == 0: return b elif b == 0: return a elif a > b: return nod(a % b, b) else: return nod(a, b % a) print(nod(10, 2)) # выведет 2
Добавьте return
в elif a > b:
и else:
def nod(a, b): if a == 0: print(b) return b elif b == 0: return a elif a > b: return nod(a % b, b) else: return nod(a, b % a)