[c++] Pytanie dotyczące funkcji i return


(stanek.94) #1

Witam. Mógłby ktoś powiedzieć czemu ten program

#include 

#include 


using namespace std;

int fib(int n)

{

    if (n>=2)

    return fib(n-1)+fib(n-2);   

    return 1;

}    

int main(int argc, char *argv[])

{

int a=fib(10);

    cout<
    system("PAUSE");

    return EXIT_SUCCESS;

}

[/code]

Po usunięciu linijki " return 1; " Nie działa prawidłowo?


(Marcinch7) #2

Ponieważ funkcja musi zwracać jakąś wartość.


(system) #3

Sama funkcja powinna bardziej wyglądać tak :

unsigned int fib(int n)

{

    if(n == 0) return 0;

    if(n == 1) return 1;

    return fib(n-1)+fib(n-2);   


}

fib.jpg


(Barry06) #4

Dla czytelności:

int fib(int n)

{

    if (n>=2)

        return fib(n-1)+fib(n-2);   

    return 1;

}

Bez wspomnianej linijki po niespełnieniu warunku (n>=2) funkcja nic nie zwróci, co jest przyczyną błędów w programie


(stanek.94) #5

Dzięki za wyjaśnienie :slight_smile:


(Drobok) #6

Takie coś jest krótkie, ale mało optymalne. Pętlą jest szybciej, bo nie wywołujesz wszystkich poprzednich wyliczeń.

int fib(int n)

{

  int a=1,b=1,c=1;

  for (int i=3; i<=n; i++)

  {

    c=a+b;

    a=b;

    b=c;

  }

  return c;

}

(stanek.94) #7

No tak też z początku robiłem :slight_smile: