如何编写递归函数判断两个字符串前n个字符是否相同
问题原因
你原代码的核心问题是调用递归函数后没有接收并使用内层递归的返回值,递归执行的结果被直接丢弃,最终仅返回了最后一位字符的对比结果,自然无法实现所有位依次校验的逻辑。
修正后的递归实现
def firstNCharsSame(string, string2, n): # 递归终止条件:仅需对比第1位(索引为0) if n == 1: return string[0] == string2[0] # 逻辑:当前位相等 + 前n-1位全部相等,整体才返回True return string[n-1] == string2[n-1] and firstNCharsSame(string, string2, n-1)
逻辑说明
- 递归会从第n位(索引
n-1)开始往前逐位对比 - 任意一位对比结果为False时,
and逻辑会直接短路终止后续递归,和迭代版中same &=的逻辑完全等价,只要出现不相同的字符就不会再做多余校验 - 所有位对比都通过才会最终返回True
你可以用原有的三个测试用例验证,运行结果和迭代版完全一致:
print(firstNCharsSame("apple", "appll", 5))# ->false print(firstNCharsSame("aaaae", "appll", 5))# ->false print(firstNCharsSame("apple", "apple", 5))# ->true
内容的提问来源于stack exchange,提问作者Cool_Cornflakes
相关产品推荐
相关产品推荐

