双阶乘的一种实现方法

2024-04-19 12:07:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我已经编写了这段代码,在Python中以迭代和递归的方式实现了双阶乘;代码可以正常工作,但我对改进我的总体编程风格很感兴趣。代码如下:

def semif_r(n):                 #recursive implementation
    if n == 0 or n == 1:
        z = 1
    else:
        z= n * semif_r(n-2)
    return z


def semif_i(n):             #iterative implementation
    N = 1
    if n == 0 or n == 1:
        return 1
    elif n%2 == 1:
        for i in range(0,n/2):
            N =  (2*i + 1)*N
            VAL = N
        return n*VAL

    elif n%2 == 0:
        for i in range(0,n/2):
            N =  (2*i+2)*N
            VAL = N
    return VAL

我希望一些有经验的程序员能给我一些关于改进代码的反馈!你知道吗


Tags: or代码inforreturnifdef编程
2条回答

我真的不明白为什么需要VAL变量,因为它等于N;只需使用N。你知道吗

你可以写:N *= (2*i + 1)而不是N = (2*i + 1)*N但是如果你不想用这种方式,也许写N = N * (2*i + 1)更好,因为它更容易阅读。你知道吗

对于算术函数,写n//2而不是n/2,因为这两个函数在python3中是不同的;在Python的不同版本中,写n//2更便于移植。你知道吗

作为一个挑战,您可以尝试使用tco模块http://baruchel.github.io/python/2015/11/07/explaining-functional-aspects-in-python/编写第三个版本作为尾部递归函数

from operator import mul
semif_pythonic = lambda x: reduce(mul, xrange(x, 1, -2))

相关问题 更多 >