Недавно я занимаюсь написанием кода для "рекурсивных функций". это, я пытаюсь закодировать одну функцию, называемую обратными цифрами, и я замечаю, что есть много разных способов сделать это. Мой код работает в IDLE, когда я использую return. Например:
def reverse_digits(num):
if num < 10:
return num
else:
return str(num%10) + str(reverse_digits(num//10))
print(reverse_digits(1234))
Тем не менее, я хочу напечатать результат в рекурсивной функции, например,
def reverse_digits(num):
if num < 10:
return num
else:
print(str(num%10) + str(reverse_digits(num//10)))
reverse_digits(1234)
я бы получил
21
3None
4None
Кто-нибудь может объяснить, почему?
Или помочь мне улучшить код?
Если вы явно ничего не return
, функция в Python вернет None
. Во второй реализации вы print
результат определенного выражения, но в этой кодировке вы не возвращаете его.
Вы можете исправить это с помощью:
def reverse_digits(num):
if num < 10:
return num
else:
res = str(num%10) + str(reverse_digits(num//10))
print(res)
return res
print(reverse_digits(1234))
Поэтому мы вычисляем его и возвращаем.
Обратите внимание, что, тем не менее, более эффективно оставаться в int
домене, вместо того чтобы выполнять все виды обработки строк и, таким образом, реализовать его так:
def reverse_digits(num, rem = 0):
if not num:
return rem
else:
return reverse_digits(num // 10, 10 * rem + (num % 10))
Учитывая, что вся арифметика может быть выполнена в постоянное время, это приведет к алгоритму O (n), тогда как первый обычно принимает O (n 2).
print(..)
во внешнем вызове (последняя строка), так как это получит результат, и перепечатайте его.
print
иreturn
.