我想從一個數字中提取所有零,并使用 Python 遞回找到零個數的長度。我已經嘗試了以下代碼,但它給了我一個錯誤。我可以使用 for 回圈來做到這一點,但我想知道 python 遞回是如何做到這一點的。對于此代碼輸出應為 3。
def zeros(n):
x = list(str(n))
if x == []:
return []
else:
head = x[0]
tail = "0"
return len([head]) zeros(tail)
print(zeros(10010))
RecursionError:呼叫 Python 物件時超出最大遞回深度
uj5u.com熱心網友回復:
因為在第一個回圈之后, head 總是一個標量值(數字),而 tail 總是 0 ,所以你的邏輯的 else 部分總是運行并且沒有邏輯停止特定條件的遞回,最終它達到遞回限制與您收到的錯誤訊息。
您可以通過這種方式輕松計算一個數字中出現的零的次數:
print(str(10010).count('0'))
你真的不需要遞回來解決這個問題。
uj5u.com熱心網友回復:
如果由于某種原因,您不喜歡count已經建議的使用簡單性并且真的想使用遞回,則以下代碼可以作業:
def zeros(n):
n = str(n)
if not len(n):
return 0
elif n[0] == '0':
return 1 zeros(n[1:])
else:
return zeros(n[1:])
uj5u.com熱心網友回復:
不需要字串,只需要算術:
def zeros(n):
if n == 0:
return 1
else:
if n < 0:
n = -n
nb_zeros = 0
while n > 0:
n, u = divmod(n, 10)
if u == 0:
nb_zeros = 1
return nb_zeros
# TESTING
for n in 0, 8, 100, 10010:
print('{:6d} --> {}'.format(n, zeros(n)))
# OUTPUT
# 0 --> 1
# 8 --> 0
# 100 --> 2
# 10010 --> 3
解釋:我們反復提取和洗掉單位數字。例如,如果:
n == 1037
然后:
n, u = divmod(n, 10)
結果是:
n == 103, u == 7
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/407585.html
標籤:
上一篇:計算大斐波那契數
下一篇:計算遞回“n”數
