Polskie forum Pythona
search
  • chevron_right Tematy
  • label Wyzwania

Python challenge "Polskie forum Pythona" - zadanie 003

pyczatkujacy
25 stycznia 2023
chat_bubble_outline 4
  • link
    pyczatkujacy
    Członkowie 43 posty
    25 stycznia 2023 20:59 25 stycznia 2023 20:59
    link

    Kolejne zadanie.
    Kto ma ochotę rozwiązać i wrzucić swoje rozwiązanie na forum, to proszę to zrobić :) Za jakiś czas porównamy nasze wyniki pod kątem poprawności oraz czasu wykonania.

    Zadanie 003:

    N-ta liczba ciągu Fibonacci

    Ciąg Fibonacciego to ciąg liczb całkowitych określony relacją rekurencji: F(n) = F(n-1) + F(n-2), gdzie F(0) = 0, a F(1) = 1. Innymi słowy, n-ta liczba Fibonacciego jest sumą poprzednich dwóch liczb Fibonacciego. Poniżej przedstawiamy kilka pierwszych wartości tego ciągu:

    0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144...

    Otrzymując na wejściu liczbę n, wypisz n-tą liczbę Fibonacciego.

    Powodzenia!

  • link
    pakarl
    Członkowie 2 posty
    25 października 2023 12:04 25 października 2023 12:04
    link

    Mój kod:

    def fibonacci(n):
        lista = [0, 1]
        x = 0
        if n > 2:
            for a in range(2, n, 1):
                x = lista[-1] + lista[-2]
                lista.append(x)
        else:
            x = lista[n-1]
        print(x)
    
    fibonacci(12)
    

    Wynik:
    89

  • link
    raydeal
    Zespół 69 postów
    11 listopada 2023 16:11 11 listopada 2023 16:11
    link

    @pakarl to nie zadziała poprawnie dla fibonacci(0) i fibonacci(1) i dla ujemnych.

  • link
    Arthan11
    Członkowie 2 posty
    2 stycznia 2024 10:01 2 stycznia 2024 10:01
    link
    Napisane przez @raydeal:

    @pakarl to nie zadziała poprawnie dla fibonacci(0) i fibonacci(1) i dla ujemnych.

    Ciąg Fibonacciego nie liczy się dla liczb ujemnych.

    By uniknąć wykonywania obliczeń w pętli proponuję zastosowanie wzoru Bineta (pl.wikipedia.org/wiki/Ci%C4%85g_Fibonacciego#Wz%C3%B3r_Bineta)

    from math import sqrt
    
    
    def fibonacci(n):
        return round((1 / sqrt(5)) * (((1 + sqrt(5)) / 2) ** n))
    
    for i in range(20):
        print(i, fibonacci(i))
    

    Można by tu jeszcze zdefiniować pewne stałe, ale już mi się nie chciało.

  • link
    raydeal
    Zespół 69 postów
    4 stycznia 2024 23:12 4 stycznia 2024 23:12
    link
    Napisane przez @Arthan11:

    Ciąg Fibonacciego nie liczy się dla liczb ujemnych.

    Użytkownik był niedouczony i wywołał funkcje fibonacci(-3) ;)

arrow_upward Idź do góry
powered by misago