如何实现递归函数sumString计算字符串中偶ASCII值字符的和?
解决递归函数
sumString的实现问题 需求说明
需要实现递归函数def sumString(st):,接收一个字符串参数,计算其中ASCII值为偶数的字符的ASCII值之和。
你的代码问题分析
第一段代码(未筛选偶数)
def sumString(st): if not st: return 0 else: return ord(st[0]+sumString(st[1:])]
存在两个语法错误:
ord()参数错误:st[0]是字符,sumString(...)是整数,二者不能直接拼接作为ord()的参数,正确写法是单独计算ord(st[0]),再和递归结果相加。- 括号不匹配:return语句末尾误用了
],应该改为)。
第二段代码(逻辑错误)
def sumString(st): if not st: return 0 t=[ord(st[0]),sumString(st[1:])] for item in t: if item%2==0: return item+t
逻辑完全偏离递归的正确思路:
- 将当前字符ASCII值和递归结果放入列表循环属于冗余操作,递归应逐步累加符合条件的值。
return item+t是整数与列表相加,类型不匹配会直接报错。- 找到第一个偶数就直接返回,忽略了后续字符的计算,不符合需求。
正确的递归实现
def sumString(st): # 基线条件:空字符串无字符可计算,返回0 if not st: return 0 current_ascii = ord(st[0]) # 当前字符ASCII为偶数则累加,否则仅返回剩余字符串的计算结果 if current_ascii % 2 == 0: return current_ascii + sumString(st[1:]) else: return sumString(st[1:])
代码解释
- 基线条件:当输入字符串为空时,没有字符需要计算,返回0。
- 递归步骤:
- 计算当前第一个字符的ASCII值
current_ascii。 - 判断该值是否为偶数:若是,将其与剩余字符串的递归计算结果相加;若否,直接返回剩余字符串的递归计算结果。
- 每次处理字符串的第一个字符,逐步缩小问题规模,直到字符串为空。
- 计算当前第一个字符的ASCII值
内容的提问来源于stack exchange,提问作者rosesareblue
相关产品推荐
相关产品推荐

