0
fibs = {0: 0, 1: 1}
def fib(n):
    if n in fibs: return fibs[n]
    if n % 2 == 0:
        fibs[n] = ((2 * fib((n / 2) - 1)) + fib(n / 2)) * fib(n / 2)
        return fibs[n]
    else:
        fibs[n] = (fib((n - 1) / 2) ** 2) + (fib((n+1) / 2) ** 2)
        return fibs[n]


def test(n):
    count = range(0,n)
    seq = []
    for i in count:
        seq.append(fib(i))
    return seq

print test(10)

[0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

0ではなく1から開始する方法なので、結果は

[1, 2, 3, 5, 8, 13, 21, 34, 55, 89]

fib を {1:1,2:2} に変更しようとしましたが、うまくいきませんでした

4

2 に答える 2

1

count = range(0, n) を count = range(2, n+2) に置き換えて、期待される出力を得ることができます。–

経由

ニコラス

def test(n):
    count = range(2,n+2)
    seq = []
    for i in count:
        seq.append(fib(i))
    return seq

ありがとう!

于 2012-12-02T07:25:15.083 に答える
0

この2つを行うことができます。結果が fibonacciNumbers に格納されているとします。1 つのオプションは、リストをスライスすることです。

fibonacciNumbers[2:]

2 番目のオプションは、単純に fibonacciNumbers から最初の要素をポップすることです。

for i in range(2):
    fibonacciNumbers.pop(0)
于 2012-12-02T07:27:16.997 に答える