Форум сайта python.su
def countdown(n: int):
“”"
Write a simple recursive function that returns a list of numbers that count down from n.
countdown(5) ->
countdown(8) ->
countdown(-1) ->
:param n: start
:return: countdown sequence
“”"
cont =
counter = n
if counter < 0:
return
elif n >= 0:
while counter >= 0:
cont.append(counter)
counter = counter - 1
return cont
Офлайн
>>> def countdown(n, acc=[]): ... if n < 0: ... return acc ... return countdown(n - 1, acc + [n]) ... >>> countdown(5) [5, 4, 3, 2, 1, 0] >>> countdown(8) [8, 7, 6, 5, 4, 3, 2, 1, 0] >>> countdown(-1) [] >>>
Отредактировано py.user.next (Окт. 29, 2020 10:41:19)
Офлайн
py.user.nextЧто такое асс в данном случае? И почему оно стоит именно там? А не вот так вот?
Офлайн
UniQueacc - accumulator (накопитель)
Что такое асс в данном случае?
UniQueПотому что вызовы идут в таком порядке
И почему оно стоит именно там? А не вот так вот?
countdown(3, [])
countdown(2, [3])
countdown(1, [3, 2])
countdown(0, [3, 2, 1])
countdown(-1, [3, 2, 1, 0])
UniQueТогда у функции будет только один аргумент и второй аргумент просто некуда передавать. А второй аргумент является ключевым для собирания всех значений в цепочку. Использование аккумулятора - стандартная идиома функционального программирования, так как в функциональных языках нет циклов и вместо циклов там используется рекурсия с передаваемым состоянием, которая оптимизируется и благодаря этому может быть бесконечной.
А не вот так вот?def countdown(n):
Отредактировано py.user.next (Окт. 29, 2020 10:39:24)
Офлайн
py.user.nextПонятно.
Офлайн