2011-09-09 44 views
0

我試圖創建一個函數,它接受一個參數(數字)並返回該數的階乘。Python中的前n項的乘積

例如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個參數?

+1

你的例子中「mul」是什麼?如果'mul'的意思是「繁殖」,那麼它如何能夠用一個論證來工作?你是不是指'term(total,k)'而不是'total * term(k,1)'?你想做什麼?你可以寫一個更詳細的解釋,說明這應該如何工作? –

回答

1
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

是否可以在不調用階乘的情況下執行此操作? –

+0

,因爲我需要使用產品()稍後用於其他功能 –

+0

查看更新。它回答你的問題嗎? –

1

計算n的階乘是遞歸函數的一個標準的例子:

def fac(n): 
    return n * fac(n-1) if n > 1 else 1 
+0

它可能是一個標準的例子,但我從來沒有喜歡它,使用遞歸時,一個簡單的迭代循環會一樣好,並且更容易理解。 – PaulMcG

1

什麼?

import operator 

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

def factorial(num): 
    return product(range(2, num+1)) 
0

如果你的意思是,在product(n, term)term(n)應串聯在該點的值是一個函數從索引n;那麼你的factorial(n)將被定義爲def factorial(n): return product(n, identity)這裏的身份是def identity(n): return n

換句話說

:「長期只需要1個參數」

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)