Вычисление факториала на языке программирования Python

Факториалом числа называют произведение всех натуральных чисел до него включительно. Например, факториал числа 5 равен произведению 1*2*3*4*5 = 120. Формулу нахождения факториала можно записать следующим образом: n! = 1 * 2 * … * n, где n – это число, а n! – факториал этого числа.
Можно записать немного по-другому: n! = 1 * … * (n-2) * (n-1) * n, т.е. каждое предыдущее число меньше на единицу, чем последующее. Нахождение факториала числа по первой формуле можно реализовать с помощью цикла while, а по второй формуле – с помощью рекурсии.

Исходный код на Python с использованием цикла

n = input("Факториал числа ") 
n = int(n) 
fac = 1 
i = 0 
while i < n:
     i += 1
     fac = fac * i 
print ("равен",fac)

Предположим, что в переменная n была связана с числом 5. Т.е. надо найти 5!.

Первых проход по телу цикла while свяжет переменную fac с произведением 1 * 1. Второй - 1 * 2, затем 2 * 3, 6 * 4, 24 * 5. Шестой раз цикл while выполняться не будет, т.к. значение переменной i будет равно 5 и выражение i < n вернет false.

Исходный код на Python с использованием рекурсии

def fac(n):
     if n == 0:
          return 1
     return fac(n-1) * n

0 шаг. Вызов функции: fac(5)
1. fac(5) возвращает fac(4) * 5
2. fac(4) => fac(3) * 4
3. fac(3) => fac(2) * 3
4. fac(2) => fac(1) * 2
5. fac(1) => 1
6. 1 * 2 - возврат в вызов fac(2)
7. 2 * 3 - fac(3)
8. 6 * 4 - fac(4)
9. 24 * 5 – fac(5)
10. Возврат в основную ветку программы значения 120.

что тут не так? Python 3.5.0

что тут не так?

Python 3.5.0 (v3.5.0:374f501f4567, Sep 13 2015, 02:16:59) [MSC v.1900 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> print(20!=1*2*3*4*5*6*7*8*9*10*11*12*13*14*15*16*17*18*19*29)
True
>>> 

print('20!', '=',

print('20!', '=', 1*2*3*4*5*6*7*8*9*10*11*12*13*14*15*16*17*18*19*20)

!= - это не равно в Python.

!= - это не равно в Python. Фактически, вы просите Питон сказать, равно ли 20 числу 1*2*3*4*5*6*7*8*9*10*11*12*13*14*15*16*17*18*19*29

>>> import math >>>

>>> import math
>>> math.factorial(n)

import sys   factorial =

import sys
 
factorial = lambda z: reduce( lambda x, y: x * y, range( 1, z + 1 ) )
 
if len( sys.argv ) > 1:  n = int( sys.argv[ 1 ] )
else: n = int( input( "число?: " ) )
 
print "n=%d => n!=%d" % ( n, factorial( n ) )

def fac(n): if n ==

def fac(n):
        if n == 0:
                return 1
        f=1
        for x in range(1,n+1): f*=x
        return f
 
if __name__ == '__main__':
        n=10
        print('%d! = %d'%(n,fac(n)))

Лучше бы показали простой

Лучше бы показали простой пример рисования фрактала с использованием рекурсии, а то таких примеров, как у вас, в интернете навалом.

Исходный код на Python с использованием рекурсии

Извините, пожалуйста, за глупый вопрос.
Объясните пожалуйста, как получаются и от куда берутся значения, при вычисление факториала, при помощи рекурсии.

def fac(n):
     if n == 0:
          return 1
     return fac(n-1) * n

0 шаг. Вызов функции: fac(5)
1. fac(5) возвращает fac(4) * 5
2. fac(4) => fac(3) * 4
3. fac(3) => fac(2) * 3
4. fac(2) => fac(1) * 2
5. fac(1) => 1
МЕНЯ ИНТЕРЕСУЕТ С ЭТОГО МОМЕНТА
6. 1 * 2 - возврат в вызов fac(2)
7. 2 * 3 - fac(3)
8. 6 * 4 - fac(4)
9. 24 * 5 – fac(5)
10. Возврат в основную ветку программы значения 120.

Когда n равна 1, то выражение

Когда n равна 1, то выражение fac(n-1) * n возвращает fac(0) * 1.

В свою очередь fac(0) возращает 1 (выполняется ветка if). Получается, что после этого происходит выход из функции и до второго return дело не доходит, иначе он должн быть обернут в ветку else.

Поскольку fac(0) = 1, то fac(0) * 1 = 1.

Исходный код на Python с использованием рекурсии

спасибо большое, не думал, что ответит кто нибудь.