• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Liczby Fibonaccieg a modulo

VPS Starter Arubacloud
0 głosów
721 wizyt
pytanie zadane 16 listopada 2018 w Matematyka, fizyka, logika przez Nowicjusz2018 Nowicjusz (240 p.)

Witam wszystkich mój problem polega na pewnym zadaniu ze spoja które brzmi następująco:

Mając daną liczbę N oblicz N-tą liczbę fibonacciego modulo 1000000007 = 10^9 +7.

W pierwszym wierszu liczba testów T<=100.

W następnych T liniach liczby Ni

Ni<=10^9

Dla każdego testu w osobnej linii Ni-ta liczba ciągu fibonacciego modulo 10^9+7

 

oto mój kod:

#include<iostream>
#include<cstdlib>
#include <math.h> 
using namespace std;

int fib(int n){
    
if(n==1 || n==2)
    return 1;
float x=(pow(10.0,9.0)+7);
return (fib(n-1)+ fib(n-2)%int(x));

    }

int main(){
    int ile;
    cin>>ile;
    if(ile>100)
        return 100;

    int n;
    for(int i=0;i<ile;i++){
    cin>>n;

   

cout<<fib(n)<<endl;
system("pause");

    }

    return 0;

}

Komunikat który mi wyskakuje brzmi że przekroczono czas.Czy jest ktoś w stanie mi pomóc z tym zadaniem ?

 

1 odpowiedź

0 głosów
odpowiedź 16 listopada 2018 przez Aisekai Nałogowiec (42,190 p.)
Rekurencja w takim wykonaniu jest bardzo wolna. Zobacz sobie, ile wykonujesz niepotrzebnie operacji np. żeby obliczyć 5 wyraz:

1) fibonacci(4) + fibonacci(3)

2) fibonacci(3)+fibonacci(2) + fibonacci(2) + fibonacci(1)

itd. Już tutaj można zauważyć, że w 1 i 2 kroku powtarza się fibonacci(3). W drugim kroku 2 razy musisz obliczyć fibonacci(2). Jeżeli to byłoby fibonacci(100) to zauważ ile niepotrzebnie razy będziesz wywoływał rekurencję.

Szybciej byłoby gdybyś zamiast rekurencji zastosował albo:

1) Iteracyjne podejście

2) Do rekurencyjnego podejścia, dołożył memoizację.

Podobne pytania

0 głosów
1 odpowiedź 300 wizyt
+1 głos
0 odpowiedzi 222 wizyt
pytanie zadane 3 lutego 2018 w Matematyka, fizyka, logika przez ELyyE Początkujący (320 p.)
0 głosów
5 odpowiedzi 4,714 wizyt
pytanie zadane 26 października 2017 w C i C++ przez mn130496 Gaduła (3,530 p.)

92,979 zapytań

141,941 odpowiedzi

321,185 komentarzy

62,303 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...