递归编程树桩?

时间:2012-11-02 10:35:48

标签: python

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

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, '')

2 个答案:

答案 0 :(得分:5)

引用wikipedia

  

递归函数定义有一个或多个基本情况,意味着函数为其简单地生成结果(不重复)的输入,以及一个或多个递归情况,意味着程序重复的输入(自称)。

这里,基本情况如下(假设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时遇到问题,请告诉我们。

答案 1 :(得分:5)

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, '')