Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.71/21: Рейтинг темы: голосов - 21, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 17.11.2013
Сообщений: 4

Как вычислить (n-1)! ?

21.11.2013, 13:33. Показов 4263. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как вычислить (n-1)! в питоне?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
21.11.2013, 13:33
Ответы с готовыми решениями:

Как вычислить дифференциал длины дуги кривой. Как вычислить производную через предел
Как вычислить дифференциал длины дуги кривой? Как вычислить производную через предел?

Как работает эта программа? Как находится площадь? Вычислить S = sh(x) = x + x^3/3! + x^5/5! + .+
#include <stdio.h> #include <stdlib.h> #include <math.h> long int factorial(int fact) { long f = 1; int i = 1; ...

Как мне определить, каким методом передают звук? И как это вычислить?
Всем доброго времени суток! Хотел бы поинтересоваться у более знающих людей. Я слышу голоса как бы, которые, на расстоянии. В больнице...

7
 Аватар для TyomaR
27 / 27 / 4
Регистрация: 05.08.2013
Сообщений: 20
21.11.2013, 19:08
Python
1
2
3
4
5
n = int(input())
a = 1
for i in range (1,n):
     a*=i
print (a)
0
 Аватар для Olej
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712
21.11.2013, 19:09
Цитата Сообщение от Снежана Дымова Посмотреть сообщение
Как вычислить (n-1)! в питоне?
Нужно думать, что ! - это знак факториала, а не восторженного удивления?

1.
Python
1
2
3
def factorial( n ):
    if n == 1: return 1
    else: return n * factorial( n - 1 )
2.
Python
1
factorial = lambda x: ( ( x == 1 ) and 1 ) or x * factorial( x - 1 )
3.
Python
1
2
3
4
5
6
try:               # Python 2
    factorial = lambda z: reduce( lambda x, y: x * y, range( 1, z + 1 ) )
    print( "n={} => n!={}".format( n, factorial( n ) ) )
except NameError:  # Python 3
    import functools
    factorial = lambda z: functools.reduce( lambda x, y: x * y, range( 1, z + 1 ) )
4.
Python
1
2
3
4
5
6
7
from sys import *
from functools import reduce
 
print( 'вычисленный факториал = {}'.format( \
         ( lambda z: reduce( lambda x, y: x * y, range( 1, z + 1 ) ) ) \
             ( ( lambda : ( len( argv ) > 1 and int( argv[ 1 ] ) ) or \
                 int( input( "число?: " ) ) )() ) ) )
0
 Аватар для TyomaR
27 / 27 / 4
Регистрация: 05.08.2013
Сообщений: 20
21.11.2013, 19:17
Olej, зачем так сложно?
0
 Аватар для Olej
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712
21.11.2013, 19:40
Цитата Сообщение от TyomaR Посмотреть сообщение
Olej, зачем так сложно?
Что сложно?

Это 4 классических варианта рекурсивного вычисления факториала, 4-й - чисто функциональный, с вводом значения n с терминала, прямо в функциональном вызове...

Выбирай на вкус.
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
21.11.2013, 21:00
Цитата Сообщение от Olej Посмотреть сообщение
Это 4 классических варианта рекурсивного вычисления факториала
в питоне так не принято делать: 1) рекурсия неглубокая 2) вызовы функции медленные 3) math.factorial()
0
 Аватар для Olej
322 / 170 / 24
Регистрация: 25.03.2012
Сообщений: 712
22.11.2013, 04:19
Цитата Сообщение от accept Посмотреть сообщение
1) рекурсия неглубокая
Это кто ж тебе такую глупость сказал?
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/python
# -*- coding: utf-8 -*-
 
import sys
 
arg = lambda : ( len( sys.argv ) > 1 and int( sys.argv[ 1 ] ) ) or \
               int( input( "число?: " ) )
 
factorial = lambda x: ( ( x == 1 ) and 1 ) or x * factorial( x - 1 )
 
n = arg()
m = sys.getrecursionlimit()
if n >= m - 1 :
    sys.setrecursionlimit( n + 2 )
    print( "глубина рекурсии превышает установленную в системе {}, переустановлено в {}".\
           format( m, sys.getrecursionlimit() ) )
 
print( "n={} => n!={}".format( n, factorial( n ) ) )
 
if sys.getrecursionlimit() > m :
    print( "глубина рекурсии восстановлена в {}".format( m ) )
    sys.setrecursionlimit( m )
Вот запусти и вычисли 10000!
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
22.11.2013, 20:33
Цитата Сообщение от Olej Посмотреть сообщение
Это кто ж тебе такую глупость сказал?
а ты не думал, почему она неглубокая ?

7-8 строки нарушают pep8

Цитата Сообщение от Olej Посмотреть сообщение
Вот запусти и вычисли 10000!
вычислил 0!
Python
1
RuntimeError: maximum recursion depth exceeded in comparison


а, вообще, вот тебе для сравнения
Code
1
2
3
4
5
6
[guest@localhost fact]$ ./timecmp.py 
[3.7823096189999887, 3.7877369549999003, 3.7847307970000656]
[4.719140961999983, 4.720780064999872, 4.7147260719998485]
[2.835803227000042, 2.830814415000077, 2.8276964130000124]
[0.44925722799985124, 0.4500691350001489, 0.4490820050000366]
[guest@localhost fact]$
из самодельных самая быстрая получилась
Python
1
2
3
4
5
def fact(n):
    r = 1
    for n in range(1, n + 1):
        r *= n
    return r
Вложения
Тип файла: zip fact.zip (1.4 Кб, 2 просмотров)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.11.2013, 20:33
Помогаю со студенческими работами здесь

Объясните как вычислить объем фигуры вращения через интеграл. Не понимаю как сделать
Y^2=4(x-2), y=0, x=3, x=6

Как вычислить
Правила п.5.18 Запрещено размещать задания и решения в виде картинок и других файлов с их текстом.

Как вычислить pi
\large y={(\pi x+arctg \mid x\mid -\sin (x))}^{\frac{1}{3}} Как вычислить функцию П?

Как вычислить
Уважаемые математики, пожалуйста, подскажите как вычислить следующую функцию: y=e^(a*x^3), где x=от 0 до 50,а=7. Полагаю, что e здесь...

Как вычислить Y
Привет всем, помогите пожалуйста как вычислить Y


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru