我已经编写了这段代码,在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
我希望一些有经验的程序员能给我一些关于改进代码的反馈!你知道吗
我真的不明白为什么需要
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/编写第三个版本作为尾部递归函数相关问题 更多 >
编程相关推荐