-1

タイトルの内容が知りたいです。たとえば、再帰ループをカウントし、最後に結果を返すか出力する方法。

ここに私のコードがありますが、正しく動作しません:

def lenRecur(aStr):
    number = 0
    print "lenRecur number is ", number
    '''
    aStr: a string

    returns: int, the length of aStr
    '''
    if aStr == '':
        return 0
    else:
        print aStr
        number += 1
        print "else number is ", number
        return lenRecur(aStr[:-1])

OK、私が書いていたときにもう一度テストしたところ、動作します。lenRecur("word", 0) を使用し、コードを少しカスタマイズすると動作します。問題は、合法的に許可されていないということです。それは合法ではありません、私はそれをすることを許可されていません:(

カスタマイズされたコード:

def lenRecur(aStr, number):
    print "lenRecur number is ", number
    '''
    aStr: a string

    returns: int, the length of aStr
    '''
    if aStr == '':
        return number
    else:
        print aStr
        number += 1
        print "else number is ", number
        return lenRecur(aStr[:-1], number)
4

3 に答える 3

1

私があなたを正しく理解していれば、これであなたの問題は解決するはずです:

def lenR(s,n=0):
    if s:
        return lenR(s[:-1],n+1)
    else:
        return n

#testing it:
lenR('this code is not pretty')  # output: 23
lenR('egg')   # output: 3
lenR('spam')  # output: 4

きれいではありませんが、再帰による文字列の長さの計算もきれいではありません。

于 2013-01-17T01:04:06.077 に答える
1

の再帰バージョンはlen最も効率的とはほど遠いと思いますが、そのようにしたい場合は、ヘルパー関数を使用してその 2 番目のパラメーターを非表示にする必要があります。

def lenRecur(aStr):
    '''
    aStr: a string

    returns: int, the length of aStr
    '''
    # place the doc string next to the `def`
    # the outside world has no ability to accidentally set the parameter
    def lenRecurHelper(aStr, num = 0):
        print "lenRecur number is ", number

        # empty strings are falsy, so just test for that.
        if not aStr:
            return num
        print aStr
        lenRecurHelper(aStr[:-1],num + 1)

    return lenRecurHelper(aStr)
于 2013-01-17T00:25:30.363 に答える
-1

あなたの意図はnumber静的関数変数として使うことだったと思います。これは次の方法で実現できます。

def lenRecur(aStr):
    if not hasattr(lenRecur, 'number'):
        lenRecur.number = 0
    print "lenRecur number is ", lenRecur.number
    '''
    aStr: a string

    returns: int, the length of aStr
    '''
    if aStr == '':
        return 0
    else:
        print aStr
        lenRecur.number += 1
        print "else number is ", lenRecur.number
        return lenRecur(aStr[:-1])

2つの引数を使用することを犠牲にして、毎回カウンターをリセットする代替手段:

def lenRecur(aStr, recurse=False):
    if not recurse:
        lenRecur.number = 0
    print "lenRecur number is ", lenRecur.number
    '''
    aStr: a string

    returns: int, the length of aStr
    '''
    if aStr == '':
        return 0
    else:
        print aStr
        lenRecur.number += 1
        print "else number is ", lenRecur.number
        return lenRecur(aStr[:-1], True)

演習の実際のポイントが何であるか、そして実装で何ができるか、何ができないかはわかりません。

于 2013-01-17T00:10:22.110 に答える