Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Центр помощи
  • » Помогите исправить задание. Код рабочий,правильный, но нужно сделать по принципу рекурсии. Помогите [RSS Feed]

#1 Окт. 27, 2020 22:20:42

UniQue
Зарегистрирован: 2020-09-29
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите исправить задание. Код рабочий,правильный, но нужно сделать по принципу рекурсии. Помогите

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

Офлайн

#2 Окт. 28, 2020 03:09:56

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

Помогите исправить задание. Код рабочий,правильный, но нужно сделать по принципу рекурсии. Помогите

  
>>> 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
Заменил рекурсию на хвостовую рекурсию. На всякий случай, хоть в питоне это и не играет роли.



Отредактировано py.user.next (Окт. 29, 2020 10:41:19)

Офлайн

#3 Окт. 28, 2020 13:39:55

UniQue
Зарегистрирован: 2020-09-29
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите исправить задание. Код рабочий,правильный, но нужно сделать по принципу рекурсии. Помогите

py.user.next
Что такое асс в данном случае? И почему оно стоит именно там? А не вот так вот?
def countdown(n):
acc=
… if n >= 0:
… return countdown(n - 1, acc + )
… return acc

Офлайн

#4 Окт. 28, 2020 23:11:34

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

Помогите исправить задание. Код рабочий,правильный, но нужно сделать по принципу рекурсии. Помогите

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):
Тогда у функции будет только один аргумент и второй аргумент просто некуда передавать. А второй аргумент является ключевым для собирания всех значений в цепочку. Использование аккумулятора - стандартная идиома функционального программирования, так как в функциональных языках нет циклов и вместо циклов там используется рекурсия с передаваемым состоянием, которая оптимизируется и благодаря этому может быть бесконечной.



Отредактировано py.user.next (Окт. 29, 2020 10:39:24)

Офлайн

#5 Окт. 29, 2020 02:02:29

UniQue
Зарегистрирован: 2020-09-29
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите исправить задание. Код рабочий,правильный, но нужно сделать по принципу рекурсии. Помогите

py.user.next
Понятно.
Спасибо болльшое

Офлайн

  • Начало
  • » Центр помощи
  • » Помогите исправить задание. Код рабочий,правильный, но нужно сделать по принципу рекурсии. Помогите[RSS Feed]

Board footer

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

Powered by DjangoBB

Lo-Fi Version