3 回答

TA貢獻1786條經驗 獲得超11個贊
我認為您可以將計數作為第二個論點
def anything(s):
def leng(s, count):
if not s:
return count
return leng(s[1:], count + 1)
return leng(isChar(s), 0)
這比從外部范圍屏蔽對象(例如使用可變對象(list或dict)或猴子修補函數本身)更好。

TA貢獻1803條經驗 獲得超3個贊
您需要使變量計數為函數變量,例如
def lenRecur(s):
? ? lenRecur.count = 0
但是,我發現代碼存在一些問題。
1)如果您嘗試通過遞歸查找字符串中的字母數,則可以這樣做:
def lenRecur(s):
? ? def leng(s, count = 0):
? ? ? ? ? ? if not s:
? ? ? ? ? ? ? ? ? ? return count
? ? ? ? ? ? else:
? ? ? ? ? ? ? ? ? ? count += int(s[0].isalpha())
? ? ? ? ? ? ? ? ? ? return leng(s[1:], count)
? ? return leng(s)
但是我還是更喜歡用一個函數來完成任務,就像根本沒有leng方法一樣。
2)如果您的目標只是查找字符串中的字母數,我希望使用列表理解
def alphalen(s):
? ? return sum([1 for ch in s if ch.isalpha()])
如果這不是學習目的,我建議您避免遞歸。因為,該解決方案不能用于較大的字符串(例如,從文件內容中查找字母計數)。您可能會遇到“最大遞歸深度超過”的RunTimeError。
即使您可以通過setrecursionlimit函數設置遞歸深度來解決此問題,我還是建議您采用其他簡單的方法。
添加回答
舉報