stanek.94
(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?
Ponieważ funkcja musi zwracać jakąś wartość.
system
(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);
}

barry06
(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
drobok
(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
(stanek.94)
#7
No tak też z początku robiłem 