如何修复递归统计字符串指定区间小写字母数量的错误代码
代码问题诊断&修正方案
原代码核心问题
- 终止条件错误:内部递归函数的终止判断
if count > high逻辑错误,你已经切取了区间子串s2,索引应该基于子串长度判断,同时原代码错误使用原字符串s[count]取字符,会导致索引完全错位 - 分支逻辑缺失:当字符不符合小写字母要求时,你直接返回了当前count值,没有继续递归遍历后续字符,这就是遇到大写/空格就停止的直接原因
- 小写判断逻辑冗余:可以直接用Python内置的
str.islower()方法,自动过滤非小写字母的所有字符(包括空格、数字、符号、大写字母等)
修正后的代码
def count_lowercase(s, low, high): # 先做参数合法性校验,避免索引越界 if low < 0 or high >= len(s) or low > high: return 0 def countfunc(idx=0): # 子串遍历完就终止递归 if idx > high - low: return 0 current_char = s[low + idx] # 当前字符是小写就计数+1,否则+0,继续递归下一个字符 return (1 if current_char.islower() else 0) + countfunc(idx + 1) return countfunc()
验证示例
测试用例:s = "aBc DeFg",low=1,high=5,对应区间字符为Bc De,小写字母是c和e,返回结果应为2:
print(count_lowercase("aBc DeFg", 1, 5)) # 输出:2
内容的提问来源于stack exchange,提问作者xander
相关产品推荐
相关产品推荐

