如何不使用全局变量递归实现字符串字符计数函数appearances
问题修正与实现方案
原有代码存在的问题
- 引入全局变量
d,会导致多次调用函数时统计结果互相污染 - 当当前字符不在字典中时,直接将
d重赋值为仅包含当前字符的新字典,会丢失之前所有统计数据 - 递归终止条件分支仅打印字典,未按照要求返回字典对象
实现思路
无需使用全局变量,利用字典可变特性递归处理:
- 递归终止条件:当
low > high时,返回空字典作为初始统计结果 - 优先递归获取
low+1到high范围的字符统计字典 - 将当前
low索引对应字符的计数更新到上述子统计字典中 - 返回更新后的字典即可
最终代码
def appearances(s, low, high): if low > high: return {} # 递归获取后半段的统计结果 count_dict = appearances(s, low + 1, high) # 更新当前字符的计数 current_char = s[low] count_dict[current_char] = count_dict.get(current_char, 0) + 1 return count_dict
测试验证
调用appearances("Hello world", 0, 10)即可得到预期结果:{'e':1, 'o':2, 'H':1, 'l':3, 'r':1, ' ':1, 'd':1,'w':1}
内容的提问来源于stack exchange,提问作者Ashley
相关产品推荐
相关产品推荐

