2017-10-04 120 views
0

我应该得到这些结果,前两个字符串是s1和s2,第三个是我应该得到的结果。 第一个代码是我写的,第二个是老师的。新递归,找不到解决方案

“Maria” e “Norma”: Mnao | 
“Mai” e “Nor”: Mnaoir | 
“Maria” e “Noa”:False | 
“Mar” e “Noa”: MNaora | 
“Mar” e “Noar”: False 
def strin(s1,s2): 
    count_n(s1,s2) 
    if len(s1)==len(s2) or s1[n]==s2[n]: 
     if s1[0]==s2[0]: 
      return "" 
     else: 
      return s1[0]+s2[0]+strin(s1[1:],s2[1:]) 
    else: 
     return False 



def count_n(s1,s2): 
    global n 
    n=0 
    if len(s1)==len(s2) and (len(s1)>0 or len(s2)>0): 
     if s1[0]==s2[0]: 
      return n 
     else: 
      return (n+1) and count_n(s1[1:],s2[1:]) 
    else: 
     return n 

老师的回答

高清intercala(S1,S2):

if s1=='' and s2 == '': 
    return '' 
if s1=='' or s2 =='': 
    return False 
if s1[0] == s2[0]: 
    return '' 

resp= intercala(s1[1:], s2[1:]) 
if resp != False: 
    return s1[0]+s2[0]+resp 
else: 
    return resp 

高清intercala2(S1,S2):

if s1=='' and s2 == '': 
    return '' 
if s1=='' or s2 =='': 
    return False 
if s1[-1] == s2[-1]: 
    return intercala2(s1[0:-1],s2[0:-1]) 

resp= intercala(s1[0:-1], s2[0:-1]) 
if resp != False: 
    return resp + s1[-1]+s2[-1] 
else: 
    return resp 
+0

'return(n + 1)and count_n(...)'应该做什么?由于'n'从0开始,'n + 1'将始终为真,因此表达式将短路并且递归永远不会被调用。 –

+1

你能尝试从中提炼出一个特定的技术问题吗?例如,如果您确切知道您的代码基于哪种假设不成立,则可以提供更具体和更精确的问题。请参阅[我如何问及回答作业问题?](https://meta.stackoverflow.com/a/334823/14122) - 简而言之,我们预计作业问题与其他任何问题一样符合相同的质量标准网站;这些标准包括特异性,并要求提供[mcve] - 可以由想要复制或测试其答案的人直接复制和粘贴的代码。 –

+0

好的。如果两个琴弦的长度相同或在同一位置有共同字母,我必须从两个琴弦中返回可互换的琴弦。如果不是,代码应该返回False。对不起,如果我不那么清楚,那么老师的问题也会让人困惑。 Iwill也发布他的回答 –

回答

0

嘿,伙计们,我发现一个答案,谢谢你的帮助

def recur(s1,s2): 
if len(s1)==len(s2): 
    if s1[0]==s2[0]: 
     return "" 
    if len(s1)==1 or len(s2)==1: 
     return s1[0]+s2[0] 
    else: 
     return s1[0]+s2[0]+recur(s1[1:],s2[1:]) 
else: 
    return False