Есть ли способ перечислить все числа Фибоначчи в последовательности? - PullRequest
0 голосов
/ 05 июля 2019

Я только начал изучать python и пытался перечислить все числа Фибоначчи в n-й член. Я написал некоторый код, который, я думаю, находится на правильном пути, но я не совсем понимаю, куда идти дальше

def fibonacci(n):
    l = [0,1]
    for i in range(2,n)
         fibonacci(i-1) + fibonacci(i-2)

Код неполный, я знаю, что мне нужно связать последнюю строку с предыдущим кодом, но я не совсем понимаю, куда идти дальше. Пожалуйста, кто-нибудь может помочь?

Ответы [ 3 ]

0 голосов
/ 05 июля 2019

Быстрый поиск в интернете покажет вам несколько интересных способов реализации кода Фибоначчи.Основными из них являются: итерация и рекурсия.Проблема с вашим кодом в том, что вы как бы смешали их вместе.

Если вы хотите использовать Recurssion, вам не хватает основных ингредиентов: условие остановки и фактический шаг (поскольку вы ничего не возвращаете).Чтобы использовать Recurssion, вы должны убедиться, что он остановится в какой-то момент.Для этого мы используем условия остановки.В нашем случае условиями остановки являются известные значения: 0 и 1.Поэтому мы хотим что-то вроде:

if n == 1:
    return 0
if n == 2:
    return 1

Теперь, когда у нас есть условие остановки, остальное легко.Просто сделайте шаг, а остальные будут работать самостоятельно:

def fib_rec(n):
    if n == 1:
        return 0
    if n == 2:
        return 1

    return fib_rec(n-1) + fib_rec(n-2)

Перейдите на эту ссылку , чтобы увидеть визуализацию того, что там происходит.


Если вы хотите использовать цикл, это просто до разработки логики с обменом значениями переменных.Что-то вроде:

def fib_loop(n):
    prev = 0
    cur = 1
    for _ in range(2, n):
        next = prev + cur
        prev = cur
        cur = next
    return next

Опять, зайдите сюда , чтобы увидеть визуализацию кода.Поможет вам разобраться.

0 голосов
/ 05 июля 2019

Генератор, который (концептуально) обеспечивает все из них, позволяет пользователю решить, сколько взять:

def fibonacci():
    a = 0
    b = 1
    while True:
        yield a
        a, b = b, a + b

from itertools import slice

first_ten = list(islice(fibonacci(), 10))
first_twenty = list(islice(fibonacci(), 20))
# etc
0 голосов
/ 05 июля 2019

Это может быть одним из способов реализации. Здесь n - это n-й член.

n = 25
a = 0
b = 1
print(a)
print(b)
for i in range(n-2):
  c = a + b;
  print(c)
  a = b;
  b = c;
...