如何将字符串逐位对比的迭代函数改写为递归实现?
递归实现字符串对应位置字符对比
嘿,先给你提个小细节:你当前的迭代版本代码里有个小问题——for i in range(0, len(S1)) and range(0,len(S2))这行写法不对,and在这里不会让你同时遍历两个范围,其实因为前面已经判断了两个字符串长度相等,直接写for i in range(len(S1))就足够啦。
接下来咱们聊聊怎么改成递归实现。递归的核心是把大问题拆解成一模一样的小问题,直到触碰到终止条件。针对这个字符串对比的需求,我们可以这么想:
- 每次只处理两个字符串的第一个字符,判断后生成对应的符号(
!或^) - 然后把剩下的子串(也就是去掉第一个字符后的部分)交给递归函数继续处理
- 当两个字符串都被处理完(变成空字符串)时,递归就终止了
下面是具体的递归实现代码:
def Compare_String_R(S1, S2): # 终止条件:两个字符串都为空,返回空字符串 if not S1 and not S2: return '' # 先判断长度是否相等,和迭代版本保持一致 if len(S1) != len(S2): return '' # 处理当前第一个字符 current_char = '!' if S1[0] == S2[0] else '^' # 递归处理剩下的子串,拼接结果 return current_char + Compare_String_R(S1[1:], S2[1:])
咱们用你给定的测试字符串来验证一下:
S1 = 'ABACADABRA' S2 = 'ACABADACCD' print(Compare_String_R(S1, S2))
输出结果应该是:!^^^!^^^^^,和修正后的迭代版本输出一致。
简单解释下递归的执行流程:
- 第一次调用:处理
A和A,生成!,然后递归处理BACADABRA和CABADACCD - 第二次调用:处理
B和C,生成^,递归处理ACADABRA和ABADACCD - 以此类推,直到最后两个子串都为空,返回空字符串,然后把所有生成的符号拼接起来得到最终结果。
内容的提问来源于stack exchange,提问作者New Python learner
相关产品推荐
相关产品推荐

