2015-06-23 57 views
1

Python版本2.7.6Python更好的方式來表達這種遞歸函數

我寫了一個迭代函數,計算特定階乘期望的尾隨零的數量。然後我試圖將其重寫爲一個遞歸函數。 這是遞歸的結果:

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 

它的工作原理,但是,對於學習的緣故,有沒有更好的辦法?

+0

你的意思是對值返回0較少比5? – moreON

+1

我根本沒有看到任何問題,你已經定義了遞歸函數的方式。 Offtopic:前綴符號是現在要避免的。 – bgusach

+0

//,Ikaros,你可以提供更多的解讀嗎? –

回答

3

僅供參考閱讀:

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

是的,這是票。而且我也看到了我的位置,這是最重要的。謝謝。 – JayJay123

+1

是的,我認爲這是最佳的。遞歸的美妙之處在於你不需要跟蹤狀態。另外,將重複參數傳遞給一個函數也應該引起一個紅旗。 雖然想出了遞歸解決方案,但還是做得不錯!它非常整潔,直到你看到它才明顯。 –

2

是的,你可以用遞歸函數做到這一點看看下面的代碼,並基於您的代碼this

def recursive_trailingZeroes(A): 
    if A==0: 
     return 0 
    return (A//5)+recursive_trailingZeroes(A//5) 
+0

因此,我已經完成了迭代方法,他希望以遞歸的方式完成它 – The6thSense

+0

謝謝,但是,我有一個可以工作的迭代版本。我想知道是否有比我寫的更好的遞歸版本。 – JayJay123

+0

對不起,我顯然沒有正確閱讀這個問題 – k4vin