Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 26, 2016 18:10:17

aleks0070
Зарегистрирован: 2016-10-23
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с решением задачи

Найти произведение всех целых чисел в диапазоне от a до b. Использовать цикл while, а не for

Офлайн

#2 Окт. 27, 2016 01:56:23

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

помогите с решением задачи

Гораздо интересней, если вообще без циклов:

 def factorial(a):
    if a == 0: return 1
    return a * factorial(a - 1) if a > 0 else a * factorial(a + 1)
factorial(b) / factorial(a - 1)

Нужно, однако, для отрицательных чисел a,b доп. обработку небольшую…

Отредактировано scidam (Окт. 27, 2016 02:05:50)

Офлайн

#3 Окт. 27, 2016 03:15:23

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

помогите с решением задачи

scidam
  
def factorial(a):
Факториал есть в модуле math. Но и факториал здесь не нужен, так как слишком затратен по времени, если расстояние от a до b большое.



Офлайн

#4 Окт. 27, 2016 04:29:07

scidam
Зарегистрирован: 2016-06-15
Сообщения: 288
Репутация: +  35  -
Профиль   Отправить e-mail  

помогите с решением задачи

py.user.next
Точно, можно гораздо проще (и также с рекурсией):

 def ab(a, b):
    if a == b: return b
    return a * ab(a + 1, b)
print ab(5, 6)

Рекурсии, правда, медленные но не важно…
И главное, что не нужно теперь беспокоиться о знаках, только чтобы a<=b выполнялось.

Офлайн

#5 Окт. 27, 2016 14:51:39

aleks0070
Зарегистрирован: 2016-10-23
Сообщения: 29
Репутация: +  0  -
Профиль   Отправить e-mail  

помогите с решением задачи

scidam
py.user.nextТочно, можно гораздо проще (и также с рекурсией):
да только мне нужно все это сделать с циклом while и без использования функций)))

Офлайн

#6 Окт. 27, 2016 15:56:12

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

помогите с решением задачи

scidam
Рекурсии, правда, медленные но не важно…
Выполни
  
ab(1, 1000)



Отредактировано py.user.next (Окт. 27, 2016 15:56:48)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version