Как написать последовательность Фибоначчи? - PullRequest
130 голосов
/ 30 января 2009

Я изначально неправильно запрограммировал программу. Вместо того, чтобы возвращать числа Фибоначчи между диапазонами (т.е. startNumber 1, endNumber 20 должен = только те числа между 1 и 20), я написал для программы, чтобы отобразить все числа Фибоначчи между диапазонами (то есть. StartNumber 1, endNumber 20 отображает = первые 20 чисел Фибоначчи). Я думал, что у меня был безошибочный код. Я тоже не понимаю, почему это происходит.

startNumber = int(raw_input("Enter the start number here "))
endNumber = int(raw_input("Enter the end number here "))

def fib(n):
    if n < 2:
        return n
    return fib(n-2) + fib(n-1)

print map(fib, range(startNumber, endNumber))

Кто-то указал в моей части II (которая была закрыта за дублирование - https://stackoverflow.com/questions/504193/how-to-write-the-fibonacci-sequence-in-python-part-ii)), что мне нужно передать startNumber и endNumber через генератор, используя цикл while. Может кто-нибудь указать мне направление о том, как это сделать? Любая помощь приветствуется.


Я учусь на программиста и столкнулся с небольшим количеством беспорядка. Меня просят написать программу, которая будет вычислять и отображать последовательность Фибоначчи по введенному пользователем начальному номеру и конечному номеру (т. Е. StartNumber = 20 endNumber = 100, и он будет отображать только числа между этим диапазоном). Хитрость заключается в том, чтобы использовать его включительно (что я не знаю, как это сделать в Python? - я предполагаю, что это означает использовать инклюзивный диапазон?).

То, что я имею до сих пор, это не настоящее кодирование, а:

  • Запись формулы последовательности Fib в бесконечное число
  • Отображение startNumber to endNumber только из последовательности Fib.

Я понятия не имею, с чего начать, и я прошу идеи или понимание того, как это написать. Я также пытался написать форумную последовательность Фибоначчи, но я тоже заблудился.

Ответы [ 43 ]

0 голосов
/ 07 марта 2014

Может быть, это поможет

def fibo(n):
    result = []
    a, b = 0, 1
    while b < n:
            result.append(b)
            a, b = b, b + a
    return result
0 голосов
/ 07 декабря 2014

Попробуйте это:

def nth_fib(n):
    if n == 0:
        return 1
    elif n == 1:
        return 0
    else:
        return nth_fib(n - 1) + nth_fib(n - 2)
0 голосов
/ 11 февраля 2015

на основе классической последовательности Фибоначчи и только для однострочников

если вам нужен только номер индекса, вы можете использовать сокращение (даже если уменьшить это не подходит для этого, это может быть хорошим упражнением)

def fibonacci(index):
    return reduce(lambda r,v: r.append(r[-1]+r[-2]) or (r.pop(0) and 0) or r , xrange(index), [0, 1])[1]

и для получения полного массива просто удалите или (r.pop (0) и 0)

reduce(lambda r,v: r.append(r[-1]+r[-2]) or r , xrange(last_index), [0, 1])
0 голосов
/ 22 февраля 2015

Как насчет этого? Я полагаю, что это не так причудливо, как другие предложения, потому что для получения ожидаемого результата требуется исходная спецификация предыдущего результата, но я считаю, что это очень удобочитаемый вариант, т. Е. Все, что он делает, это предоставляет результат и предыдущий результат для рекурсия.

#count the number of recursions
num_rec = 0

def fibonacci(num, prev, num_rec, cycles):

    num_rec = num_rec + 1

    if num == 0 and prev == 0:
        result  = 0;
        num = 1;
    else:
        result = num + prev

    print(result)

    if num_rec == cycles:
        print("done")
    else:
        fibonacci(result, num, num_rec, cycles)

#Run the fibonacci function 10 times
fibonacci(0, 0, num_rec, 10)

Вот вывод:

0
1
1
2
3
5
8
13
21
34
done
0 голосов
/ 10 октября 2018

Выполнение этого решения путем вызова функции и модульности

def userInput():
    number = int(input('Please enter the number between 1 - 40 to find out the 
    fibonacci :'))
    return number

def findFibonacci(number):
    if number == 0:
        return 0
    elif number == 1:
        return 1
    else:
        return findFibonacci(number - 1) + findFibonacci (number - 2)


def main():
    userNumber = userInput()
    print(findFibonacci(userNumber))

main() 
0 голосов
/ 30 декабря 2018

Простое определение - попробуйте это ..

def fib(n):
    first = 0
    second = 1
    holder = 0
    array = []
    for i in range(0, n):
      first = second
      second = holder
      holder = first + second
      array.append(holder)
    return array

input -> 10
output -> [1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
0 голосов
/ 12 сентября 2013

Просто переживаю http://projecteuler.net/problem=2 это был мой взгляд на это

# Even Fibonacci numbers
# Problem 2

def get_fibonacci(size):
    numbers = [1,2]
    while size > len(numbers):
        next_fibonacci = numbers[-1]+numbers[-2]
        numbers.append(next_fibonacci)

    print numbers

get_fibonacci(20)
0 голосов
/ 02 апреля 2019
# num is the number up to which your list will go
#first I created a list, and I wanted to code #everything, but obviously, I could have typed l = [0,1]

def fab(num):

    l = []
    for k in range(0,2):
        l.append(k)

    while l[-1]<num:
        x = l[-1]+l[-2]

        if x>=num:
            break
        else:
            l.append(x)

    return l
0 голосов
/ 23 мая 2019

Питонически вы можете написать фибанную серию следующим способом:

a,b = 0,1 
while b < 1000:
    b = (b, end = ' ', flush = True)
    a,b = b , a+b 
0 голосов
/ 17 мая 2019

Это можно сделать следующим образом.

n = 0

numbers = [0]

for i in range(0,11):
    print n,
    numbers.append(n)
    prev = numbers[-2]
    if n == 0:
        n = 1
    else:
        n = n + prev
...