Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 23, 2021 20:00:16

KAGOR
Зарегистрирован: 2021-04-18
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Туплю в рекурсивных функциях

Сижу час и не понимаю как это произошло. Либо я устал и туплю, но я читаю код и не понимаю как так получается…

Офлайн

#2 Апрель 23, 2021 20:00:51

KAGOR
Зарегистрирован: 2021-04-18
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Туплю в рекурсивных функциях

Офлайн

#3 Апрель 23, 2021 21:18:10

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9880
Репутация: +  853  -
Профиль   Отправить e-mail  

Туплю в рекурсивных функциях

KAGOR
Либо я устал и туплю, но я читаю код и не понимаю
Это результат того, что человек, писавший всё это, решил показать, какой он умный. Для этого у него имеется стандартный критерий новичка “умный код = короткий код”. Он его применил, поэтому теперь ты, читающий его код, должен сидеть и разворачивать у себя в голове всё это обратно, чтобы просто понять. Так выглядит работа говнокодера - куча коротких кодов, которые проще выкинуть, чем понимать, тратя на это время.

  
>>> def minelem(lst, i=0, length=None, acc=None):
...     if length is None:
...         length = len(lst)
...     if i == length:
...         return acc
...     if acc is None:
...         acc = lst[0]
...     if lst[i] < acc:
...         return minelem(lst, i + 1, length, lst[i])
...     else:
...         return minelem(lst, i + 1, length, acc)
... 
>>> minelem([])
>>> minelem([1])
1
>>> minelem([1, 2])
1
>>> minelem([2, 1])
1
>>> minelem([5, 4, 1, 2, 7, 6])
1
>>> minelem([3, 2, 1])
1
>>>

  
>>> def nummirror(n, acc=0):
...     if n == 0:
...         return acc
...     else:
...         return nummirror(n // 10, acc * 10 + n % 10)
... 
>>> nummirror(1)
1
>>> nummirror(12)
21
>>> nummirror(21)
12
>>> nummirror(123)
321
>>> nummirror(1234)
4321
>>>



Отредактировано py.user.next (Апрель 24, 2021 02:17:59)

Офлайн

#4 Апрель 25, 2021 17:13:42

KAGOR
Зарегистрирован: 2021-04-18
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Туплю в рекурсивных функциях

Ахах, спасибо

Офлайн

#5 Апрель 25, 2021 17:54:21

KAGOR
Зарегистрирован: 2021-04-18
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Туплю в рекурсивных функциях

py.user.next
Лучше скажу как я читаю код, все равно ничего не понял. Если n равно нулю верни 0(т.е acc), иначе верни равенство от целочисленного деления n на 10(например хотим развернуть число 123, получается 12), потом 0 умножаем на 10 получаем 0 и суммируем остаток от деления 123 на 10(это у нас 3). Получается (12,3). Каким образом получается 321 не понял…

Офлайн

#6 Апрель 25, 2021 21:52:38

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9880
Репутация: +  853  -
Профиль   Отправить e-mail  

Туплю в рекурсивных функциях

KAGOR
Если n равно нулю верни 0(т.е acc), иначе верни равенство от целочисленного деления n на 10
Если n равно нулю, то верни acc, иначе вычисли функцию от новых n и acc и верни её результат. Внутри той функции происходит то же самое. Если n равно нулю, то верни acc, иначе вычисли функцию от новых n и acc и верни её результат. Внутри той функции происходит то же самое. И так оно будет спускаться, пока n не станет равно нулю из-за делений. В acc (accumulator) будет постепенно накапливаться перевёрнутое число, так как при каждом внутреннем вызове функции к acc дописывается цифра, взятая из числа в n.

Здесь писал про рекурсию.



Офлайн

#7 Апрель 25, 2021 23:35:23

KAGOR
Зарегистрирован: 2021-04-18
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Туплю в рекурсивных функциях

py.user.next
Блин, спасибо большое Теперь понял.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version