递归编程树桩?

Aay*_*wal 0 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
Run Code Online (Sandbox Code Playgroud)

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

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, '')
Run Code Online (Sandbox Code Playgroud)

geo*_*org 5

引用维基百科:

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

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

 if one of A or B is empty -> return the other string
Run Code Online (Sandbox Code Playgroud)

和递归的情况:

   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
Run Code Online (Sandbox Code Playgroud)

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


Che*_*nQi 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, '')
Run Code Online (Sandbox Code Playgroud)