0

同じ値に等しい特定の制限を持つフィボナッチ数列の要素と合計のすべての組み合わせを見つける方法を探しています。combinations()そのような問題を解決するにはfromitertoolsが最善の策であることは知っていますが、Python は初めてなので、一致する組み合わせを保持する方法を知りたいです (アルゴリズムの終わりではないため、1 つだけが正しいため)。

私は現在持っています:

 # Call Fibonacci sequence with a given limit:
 def fib1(n): 
     result = []
     a, b = 1, 1
     while a < n:
         result.append(a)
         a, b = b, a + b
     return result


# Wrong code, skeleton:
def zeckendorf(n):
    from itertools import combinations
    seq = fib1(n)
    row = []
    sum = 0
    for i in combinations(seq, len(seq)):
        sum += i
        row.append(i)
        if sum > n:
            sum = 0
            row = []
            continue
        elif sum == n:
            break

    return row

これで、2 番目のビットが多くの点で間違っていることがわかりました。また、タプルを整数に追加しようとするという間違いを犯します。itertools モジュールを使用して、これらの組み合わせの個別の要素を個別に反復処理する方法を知る必要があります。合計「n」との組み合わせだけが役に立ちます。

4

3 に答える 3

1

あなたが達成しようとしていることを正しく理解している場合は、次のコードを使用してください。

def zeckendorf(n):
    seq = fib1(n)
    for i in range(1, len(seq)):
        for comb in itertools.combinations(seq, i):
            if sum(comb) == n:
                return list(comb)
    return []

このコードについてさらに説明が必要な場合は、質問してください:)

于 2013-03-29T11:10:26.480 に答える
1

目的の合計となるすべての組み合わせを見つけるには、各組み合わせを結果リストに追加します。

def combinations_with_sum(sequence, desired_sum):
    results = []
    for i in range(len(sequence)):
        results.extend([combination for combination in combinations(sequence, i)
                        if sum(combination) == desired_sum])
    return results
于 2013-03-29T11:13:27.243 に答える