Найти - Пользователи
Полная версия: Помогите исправить задание. Код рабочий,правильный, но нужно сделать по принципу рекурсии. Помогите
Начало » Центр помощи » Помогите исправить задание. Код рабочий,правильный, но нужно сделать по принципу рекурсии. Помогите
1
UniQue
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
py.user.next
  
>>> 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)
[]
>>>

Add
Заменил рекурсию на хвостовую рекурсию. На всякий случай, хоть в питоне это и не играет роли.
UniQue
py.user.next
Что такое асс в данном случае? И почему оно стоит именно там? А не вот так вот?
def countdown(n):
acc=
… if n >= 0:
… return countdown(n - 1, acc + )
… return acc
py.user.next
UniQue
Что такое асс в данном случае?
acc - 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):
Тогда у функции будет только один аргумент и второй аргумент просто некуда передавать. А второй аргумент является ключевым для собирания всех значений в цепочку. Использование аккумулятора - стандартная идиома функционального программирования, так как в функциональных языках нет циклов и вместо циклов там используется рекурсия с передаваемым состоянием, которая оптимизируется и благодаря этому может быть бесконечной.
UniQue
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