Произведение первых n членов в последовательности в python - PullRequest
0 голосов
/ 09 сентября 2011

Я пытаюсь создать функцию, которая принимает один аргумент (число) и возвращает факториал этого числа.

Например, f (5) вернет 1 * 2 * 3 * 4 * 5

То, что у меня пока есть, это

def product(n, term):
    """Return the product of the first n terms in a sequence.

    term -- a function that takes one argument
    """
    k, total = 1, 1
    while k <= n:
        k, total = k + 1, total * term(k, 1)
    return total


def factorial(n):
    """Return n factorial by calling product.

    >>> factorial(4)
    24
    """
    return product(n, mul)

Однако возможно ли сделать так, чтобы термин принимал только 1 аргумент?

Ответы [ 4 ]

1 голос
/ 09 сентября 2011

Вычисление факториала n является стандартным примером рекурсивной функции:

def fac(n):
    return n * fac(n-1) if n > 1 else 1
1 голос
/ 09 сентября 2011

А как же?

import operator

def product(nums):
    return reduce(operator.mul, nums, 1)

def factorial(num):
    return product(range(2, num+1))
1 голос
/ 09 сентября 2011
import math

def factorial(n):
    return math.factorial(n)

Альтернативная реализация:

def factorial(n):
    return reduce(lambda x,y:x*y,range(1,n+1))

Использование рекурсии:

def factorial(n):
     if n == 0:
         return 1
     else:
         return n * factorial(n-1)
0 голосов
/ 09 сентября 2011

, если вы имеете в виду, что в product(n, term), term(n) должна быть функцией от индекса n последовательно до значения в этой точке; тогда ваш factorial(n) будет определен как def factorial(n): return product(n, identity), где идентичность def identity(n): return n

другими словами:

def product(n, term):
    """Return the product of the first n terms in a sequence.

    term -- a function that takes one argument
    """
    k, total = 1, 1
    while k <= n:
        k, total = k + 1, total * term(k)
    return total


def identity(n):
    return n

def factorial(n):
    """Return n factorial by calling product.

    >>> factorial(4)
    24
    """
    return product(n, identity)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...