Найти - Пользователи
Полная версия: Туплю в рекурсивных функциях
Начало » Python для новичков » Туплю в рекурсивных функциях
1
KAGOR
Сижу час и не понимаю как это произошло. Либо я устал и туплю, но я читаю код и не понимаю как так получается…
KAGOR
py.user.next
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
>>>
KAGOR
Ахах, спасибо
KAGOR
py.user.next
Лучше скажу как я читаю код, все равно ничего не понял. Если n равно нулю верни 0(т.е acc), иначе верни равенство от целочисленного деления n на 10(например хотим развернуть число 123, получается 12), потом 0 умножаем на 10 получаем 0 и суммируем остаток от деления 123 на 10(это у нас 3). Получается (12,3). Каким образом получается 321 не понял…
py.user.next
KAGOR
Если n равно нулю верни 0(т.е acc), иначе верни равенство от целочисленного деления n на 10
Если n равно нулю, то верни acc, иначе вычисли функцию от новых n и acc и верни её результат. Внутри той функции происходит то же самое. Если n равно нулю, то верни acc, иначе вычисли функцию от новых n и acc и верни её результат. Внутри той функции происходит то же самое. И так оно будет спускаться, пока n не станет равно нулю из-за делений. В acc (accumulator) будет постепенно накапливаться перевёрнутое число, так как при каждом внутреннем вызове функции к acc дописывается цифра, взятая из числа в n.

Здесь писал про рекурсию.
KAGOR
py.user.next
Блин, спасибо большое Теперь понял.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB