3

Python で再帰関数を使用する必要があります。以下のコードは単純化されたモデルです。再帰中に新しいリストや辞書を生成せずに結果リストとdict辞書を保持し、再帰後にそれを返したいのですが、どうすれば解決できますか?

def test(length):
    result = []
    dict = {}
    if length == 10:
        return result, dict
    else:
        result.append(length)
        dict[length] = length + 1
        test(length + 1)

x, y = test(0)
print x, y
4

2 に答える 2

1

あなたの再帰は少し壊れていると思います。

Pythonには、やりたいことを正確に実行するための他のオプションがいくつか用意されています。私はこのフォーマットが好きです:

def t(length, result = [], d = {}):
    if length == 10:
        return
    else:
        result.append(length)
        d[length] = length + 1
        t(length + 1)

    return (result, d)

x, y = t(0)
print x, y

配列と辞書の初期化は、関数を呼び出すたびにではなく、関数がインタープリターによって認識されたときにのみ発生します。Pythonのデフォルトパラメータの概要については、このページを参照してください。

この場合、それらは関数に接続されている配列や辞書のように機能します。

于 2012-10-29T04:51:46.960 に答える
1

再帰を実行するヘルパー関数と、メイン関数を使用して、初期の既定値でヘルパーを呼び出します。

def test(length):
    result = []
    dict = {}
    _test(length, result, dict)
    return result, dict

def _test(length, result, dict):
    if length == 10:
        return
    else:
        result.append(length)
        dict[length] = length + 1
        _test(length + 1, result, dict)

x, y = test(0)
print x, y
于 2012-10-29T01:22:00.157 に答える