File: Stare vježbe/vjezbe07/44__fibonacci__static.c
/* 44__fibonacci__static.c "Ispravak" programa 43__fibonacci.c -- broj_poziva je bitno manji. Staticka varijabla (u ovom slucaju polje fib) se "stvara" samo jednom za funkciju, a ne jednom za svaki poziv funkcije. ----- Program pomocu rekurzivnih poziva funkcije fibo racuna n-ti Fibonaccijev broj. Nakon sto izracunamo neki Fibonaccijev broj spremamo ga u polje fib tako da ga necemo vise puta racunati (varijabla fib je staticka!). */ #include <stdio.h> #define MAXN 100 int broj_poziva; int fibo ( int n ) { static int fib[MAXN]={0}; broj_poziva++; if (n==0) return 0; if (n==1) return 1; if (fib[n]==0) fib[n]=fibo(n-1) + fibo(n-2); return fib[n]; } int main () { int broj; printf ("Unesite prirodni broj: "); scanf ("%d", &broj); broj_poziva=0; printf ("%d. Fibonacci-jev broj je %d.\n", broj, fibo (broj )); printf ("Za njegov izracun funkcija fibo pozvana je %d puta.\n", broj_poziva); /* jos jednom ponavljamo za neki drugi broj -- uocite koliki je sada broj_poziva */ printf ("\nUnesite prirodni broj: "); scanf ("%d", &broj); broj_poziva=0; printf ("%d. Fibonacci-jev broj je %d.\n", broj, fibo (broj )); printf ("Za njegov izracun funkcija fibo pozvana je %d puta.\n", broj_poziva); return 0; }
|