Python是表示此递归函数的更好方法

Python是表示此递归函数的更好方法,python,recursion,Python,Recursion,Python版本2.7.6 我编写了一个迭代函数,用于计算特定阶乘所需的尾随零的数量。然后我尝试将其重写为递归函数。 这是递归结果: def f_FactorialTailZeros(v_Num, v_Result = 0): if v_Num < 5: return v_Num v_Result = v_Result + f_FactorialTailZeros(v_Num // 5, v_Num // 5) return v_Result pr

Python版本2.7.6

我编写了一个迭代函数,用于计算特定阶乘所需的尾随零的数量。然后我尝试将其重写为递归函数。 这是递归结果:

def f_FactorialTailZeros(v_Num, v_Result = 0):
    if v_Num < 5:
        return v_Num
    v_Result = v_Result + f_FactorialTailZeros(v_Num // 5, v_Num // 5)
    return v_Result

print(f_FactorialTailZeros(30)) ## 7
print(f_FactorialTailZeros(70)) ## 16
def_factorialtailzero(v_Num,v_Result=0):
如果v_Num<5:
返回v_Num
v_Result=v_Result+f_factorialtailzero(v_Num//5,v_Num//5)
返回v_结果
打印(f#u factorialTailzero(30))##7
打印(f#u FactorialTailZeros(70))##16

它可以工作,但是为了学习,有更好的方法吗?

是的,您可以使用递归函数来完成。请看一下下面的代码,以供参考


是的,你们可以用递归函数来实现,看看下面的代码,供参考

根据您的代码:

def f_FactorialTailZeros(v_Num):
    if v_Num < 5:
        return 0
    return v_Num // 5 + f_FactorialTailZeros(v_Num // 5)
def_factorialtailzero(v_Num):
如果v_Num<5:
返回0
返回v_Num//5+f_factorialtailzero(v_Num//5)
根据您的代码:

def f_FactorialTailZeros(v_Num):
    if v_Num < 5:
        return 0
    return v_Num // 5 + f_FactorialTailZeros(v_Num // 5)
def_factorialtailzero(v_Num):
如果v_Num<5:
返回0
返回v_Num//5+f_factorialtailzero(v_Num//5)

对于小于5的值,是否要返回0?我看不出您定义递归函数的方式有任何问题。Offtopic:前缀表示法现在是要避免的。//,Ikaros,你能提供关于它的进一步阅读吗?你的意思是对小于5的值返回0吗?我认为你定义递归函数的方式没有任何问题。Offtopic:前缀符号是现在要避免的东西。//,Ikaros,你能提供关于它的任何进一步的阅读吗?所以已经完成了迭代方法,他想以递归的方式完成它。谢谢,但是,我有一个迭代版本可以工作。我想知道是否有一个比我写的更好的递归版本。所以已经完成了迭代方法,他想用递归的方式来做。谢谢,但是,我有一个可以工作的迭代版本。我想知道是否有比我写的更好的递归版本。是的,就是这样。我也看到了我偏离轨道的地方,这是最重要的。谢谢。是的,我认为这是最好的。递归的美妙之处在于,您不需要跟踪状态。此外,向函数传递重复的参数也会引起危险。不过,对于提出递归解决方案来说,做得很好!它非常整洁,而且在你看到它之前不会立即显现出来。是的,这就是问题所在。我也看到了我偏离轨道的地方,这是最重要的。谢谢。是的,我认为这是最好的。递归的美妙之处在于,您不需要跟踪状态。此外,向函数传递重复的参数也会引起危险。不过,对于提出递归解决方案来说,做得很好!它非常整洁,在你看到它之前不会立即显现出来。