如何用 python 写一个程序用于计算 n 的阶乘 n!

如何用 python 写一个程序用于计算 n 的阶乘 n!

新学乍练 Python,遇到一个问题,心血来潮想自己写个程序解决,不料遇到程序中要写一个用于计算阶乘的函数,却怎么也写不出。

逛《啄木鸟》时,无意中看到有人实现了一个,但是限于自身水平不济,竟然看不懂人家的代码,实在不好意思,上来看看这里论坛有没有哪位位老兄能够指点一下,不胜感激。

啄木鸟上的一个源码如下:

[Copy to clipboard] [ - ]
CODE:
def P(x, y = None):
        '''
        求排列数P(x, y),y默认值为x,此时取P(x),即x!
        '''
        if x == 0 or y == 0:
                return 1

        re = x
        i = x - 1
        if y == None:
                z = 1
        else:
                z = x - y


        while i > z:
                re *= i
                i -= 1
        return re



[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/env python                                                           

n=10
print reduce(lambda x,y:x*y, range(1,n+1))

可读性好一些的版本:

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/env python                                                           

from operator import mul

n=10
print reduce(mul, range(1,n+1))

谢谢楼上的。

不知道还有一个 reduce 函数。

我想了很久,一直在 f(n) = n*f(n-1) 上兜圈子,一直想怎么用一个 closure 函数来实现此功能。

可能是思维定势了
一般的做法是上一个循环。看你的回复好像想用递归。下面是一个递归版本:

[Copy to clipboard] [ - ]
CODE:
#!/usr/bin/env python                                                           

def factorial(n):
    if n==0:
        return 1
    else:
        return n*f(n-1)

print factorial(10)

哈哈,我依样画葫芦,终于也做出一个来了:

[Copy to clipboard] [ - ]
CODE:
def fra(n):
        if n < 1:
                return 1
        i = 1
        total = 1
        while i <= n:
                total *= i
                i += 1
                continue
        return total



QUOTE:
原帖由 retuor 于 2008-8-28 23:08 发表
一般的做法是上一个循环。看你的回复好像想用递归。下面是一个递归版本:


#!/usr/bin/env python                                                           

def factorial(n):
    if n==0:
     ...

爽啊,没想到 python 居然也支持递归的。

今天收获不少,谢谢兄弟热心解答,以后还要多多请教。


QUOTE:
原帖由 lephon 于 2008-8-28 23:17 发表
哈哈,我依样画葫芦,终于也做出一个来了:

def fra(n):
        if n < 1:
                return 1
        i = 1
        total = 1
        while i  

呵呵,这个不用continue。


QUOTE:
原帖由 lephon 于 2008-8-28 23:22 发表




爽啊,没想到 python 居然也支持递归的。

今天收获不少,谢谢兄弟热心解答,以后还要多多请教。

这个....我还真不知道哪个编程语言不支持递归的。
python 支持递归,但对尾递归没有优化。如果没有什么特别理由,在 python 里还是少使用递归为好。