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

ウィキペディアを引用するには:

再帰関数定義には、1 つまたは複数の基本ケース (関数が単純に (再帰なしで) 結果を生成する入力を意味する) と、1 つまたは複数の再帰ケース (プログラムが再帰する (自分自身を呼び出す) 入力を意味する) があります。 .

ここで、基本ケースは次のとおりです (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 に答える