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函数设置递归深度来解决此问题,我还是建议您采用其他简单的方法。
添加回答
举报