2012-12-02 2 views
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] 

как сделать это начинается с 1, а не 0, поэтому результатИзменить начальные значения итерации в последовательности Python

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

Я попытался изменить выдумки к {1: 1,2: 2 } но это не сработало

+2

Вы можете заменить 'count = range (0, n)' на 'count = range (2, n + 2)' для получения ожидаемого результата. – Nicolas

ответ

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 

спасибо!

0

Вы можете сделать две из этих вещей. Предположим, что ваш результат хранится в fibonacciNumbers. Одним из вариантов является фрагмент списка:

fibonacciNumbers[2:] 

Второй вариант просто выскочить первый элемент из fibonacciNumbers.

for i in range(2): 
    fibonacciNumbers.pop(0) 
+0

Только незначительно более эффективен; для всплывания первого элемента списка требуется переместить все остальные элементы вниз в памяти, по существу копируя их все. – kindall

+0

Вы правы. Вместо этого коллекция.deque будет иметь больше смысла для операций добавления/удаления на концах. Я имею в виду, что добавление/удаление на концах имеет O (1) в deque. У меня было неправильное представление о том, что список python является реализацией связанных списков. В любом случае, я оставил свой ответ. Спасибо за разъяснение. –

Смежные вопросы