Python 双阶乘的一种实现
我已经编写了这段代码,在Python中以迭代和递归的方式实现了双阶乘;代码可以正常工作,但我对改进我的总体编程风格感兴趣。代码如下:Python 双阶乘的一种实现,python,recursion,iteration,Python,Recursion,Iteration,我已经编写了这段代码,在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): #iter
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
我希望一些有经验的程序员能给我一些关于改进代码的反馈 我真的不明白为什么需要
VAL
变量,因为它等于N
;只需使用N
你可以写:N*=(2*i+1)
而不是N=(2*i+1)*N
但是如果你不想用这种方式,也许写N=N*(2*i+1)
更好,因为它更容易阅读
对于算术函数,编写n//2
而不是n/2
,因为它们在Python 3中是不同的;编写n//2
比不同版本的Python更便于移植
作为一项挑战,您可能希望尝试使用
tco
模块编写第三个版本作为尾部递归函数:只要(a)您的代码按预期工作,(b)您的代码是真实代码,而不是示例代码,以及(c)您的代码包含在问题主体中,这个问题就可以适用。如果您希望通过同行评议来改进代码的各个方面,请将其发布在代码评议上。我投票将此问题作为主题外的问题结束,因为它属于主题外的问题。此问题现已结束。大型n
,例如n==2000
,会发生什么情况?谢谢您的建议!
from operator import mul
semif_pythonic = lambda x: reduce(mul, xrange(x, 1, -2))