Откуда эта 2 пришла в выходной? Ряд Фибоначчи с использованием списков Python - PullRequest
0 голосов
/ 30 августа 2018

Если вы не хотите читать этот текст, я объяснил проблему в этом видео на Youtube: https://youtu.be/Ekkkgjf0F_s

Ниже приведен код, который я использую для генерации рядов Фибоначчи с использованием Python. списки.

list1 = [0, 1]
x=1
while x <=2:
    length = len(list1)
    first =list1[length-2]
    second =list1[length-1]
    third = first + second
    list1.append(third)
    x+=1
    print list1

Когда цикл while выполняется для 1-й итерации, он генерирует предстоящий элемент в серии и сохраняет в списке именно то, что он должен делать. Список теперь станет:

list1 = [0,1,1]

Но меня смущает то, что вторая итерация выполняется циклом while. Если вы выполните пробный код, вы увидите, что код выводит 2 (согласно последовательности рядов Фибоначчи, это правильно) но если мы выполним пробный код, 4-й элемент должен быть 3 вместо 2

2-е целое, длина = 3 >> Dry RUN ниже :

 3-2=1
    3-1=2
    1+2=3
    list1 should be: [0,1,1,3]

Но я получаю вывод как: list1=[0,1,1,2]

Я не могу понять, как эти 2 пришли в выходной.

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Когда ваш list1 становится [0,1,1], длина списка list1 равна 3.

Теперь попробуйте выполнить следующее:

length = len(list1) = 3
first = list1[length-2] = list1[3-2] = list1[1] = 1
second = list1[length-1] = list1[3-1] = list1[2] = 1
third = first + second = 1 + 1 = 2

Следовательно, он добавляет 2 к списку.

0 голосов
/ 30 августа 2018

ваш список имеет len() из 3, и поэтому ваш алгоритм добавляет элементы 1 и 2 (которые оба равны 1) вместе. вот почему вы получите 2.

РЕДАКТИРОВАТЬ: именно так поступает серия Фибоначчи ....

Код с комментариями следующим образом:

length = len(list1)       #3
first =list1[length-2]    #list on index 1 is value 1
second =list1[length-1]   #list on index 2 is value 1
third = first + second    # 1+1 = 2
list1.append(third)       # 2 is appended
x+=1
print list1

вы, вероятно, путаете значение в индексе списка [1] с фактической разницей между длинами списка 3 и 1.

...