0

我被要求创建一个程序,完成后我要制作它的递归版本。它没什么,它把绳子系在一起。这是我写的它的版本,谁能告诉我如何用它制作一个递归程序?

def laceStrings(s1, s2):
    """
    s1 and s2 are strings.

    Returns a new str with elements of s1 and s2 interlaced,
    beginning with s1. If strings are not of same length, 
    then the extra elements should appear at the end.
    """
    join = []
    smaller = min(s1, s2, key=len)
    for num in range(len(smaller)):
        join.append(s1[num])
        join.append(s2[num])
    join = ''.join(join)
    if len(s1) != len(s2):
        smaller = len(smaller)
        join = join + max(s1, s2, key=len)[smaller:]
    return join

编辑:我的朋友给了我这个模板,但我仍然无法弄清楚。任何人都可以帮忙吗?

def laceStringsRecur(s1, s2):
    """
    s1 and s2 are strings.

    Returns a new str with elements of s1 and s2 interlaced,
    beginning with s1. If strings are not of same length, 
    then the extra elements should appear at the end.
    """
    def helpLaceStrings(s1, s2, out):
        if s1 == '':
            #PLACE A LINE OF CODE HERE
        if s2 == '':
            #PLACE A LINE OF CODE HERE
        else:
            #PLACE A LINE OF CODE HERE
    return helpLaceStrings(s1, s2, '')
4

2 回答 2

6
def laceStringsRecur(s1, s2):

    """
    s1 and s2 are strings.

    Returns a new str with elements of s1 and s2 interlaced,
    beginning with s1. If strings are not of same length, 
    then the extra elements should appear at the end.
    """
    def helpLaceStrings(s1, s2, out):
        if s1 == '':
            #PLACE A LINE OF CODE HERE
            return out+s2
        if s2 == '':
            #PLACE A LINE OF CODE HERE
            return out+s1
        else:
            #PLACE A LINE OF CODE HERE
            return helpLaceStrings(s1[1:], s2[1:], out+s1[0]+s2[0])
    return helpLaceStrings(s1, s2, '')
于 2012-11-02T11:07:02.117 回答
5

引用维基百科

递归函数定义具有一个或多个基本情况,即函数为其生成结果的输入(不重复)和一个或多个递归情况,即程序重复(调用自身)的输入.

这里,基本情况如下(假设 A 和 B 是参数字符串):

 if one of A or B is empty -> return the other string

和递归情况:

   split each of A, B into the first char and the rest (eg. XYZ => X, YZ)
   (recursive call) S = interlaced version of rest(A),rest(B)
   return first-char(A) + first-char(B) + S

如果您在将其转换为 python 时遇到问题,请告诉我们。

于 2012-11-02T11:02:14.443 回答