Professional Documents
Culture Documents
long f(int n)
{
if( n < 2 )
return (n+1);
// POTENCIJE; //
long pot(long x, long y)
{
if(y <= 0)
return 1;
// ARITMETIČKI NIZ; //
int aNiz(int a0, int d, int n)
{
if( n == 0 )
return a0;
// FAKTORIJELE; //
int faktorijele(int n)
{
if(n <= 1)
return 1;
float ispis(int n)
{
if( n >= 1 )
{
printf("%d\n",n);
ispis(n-1);
printf("%d\n",n);
}
return 0.00
}
Niz brojeva definiran je rekurzivno na slijedeći način:
f 0 = 1,
f 1 = 2,
f 2 = 3,
long f(int n)
{
if( n <= 2 )
return (n+1);
O(3n )
Napisati rekurzivnu funkciju koja će izračunati umnožak dva broja a i b koristeći se samo
operacijom zbrajanja. Odrediti apriornu složenost funkcije. Funkcija mora imati prototip:
return a + puta( a, b -1 );
}
O(1n ) ****O(1)
Napisati rekurzivnu funkciju koja izračunava umnožak znamenki zadanog broja
(n.pr. uz(329)=3*2*9=54). Koristiti operatore cjelobrojnog dijeljenja integera (/) i modulo operator
(%). Prototip funkcije je:
int uz (int a)
int uz(int a)
{
int b = a%10;
if( a/10 == 0 )
return a;
return imax;
}
Napisati rekurzivnu funkciju koja izračunava najveću zajedničku mjeru dva broja. Koristiti
Euklidov algoritam koji kaže da je za dva broja, a i b, najveća zajednička mjera a ako je b = 0, a
inače je to najveća zajednička mjera od b i ostatka dijeljenja a sa b. Prototip funkcije je:
Jednostruko povezana lista u memoriji sadrži statističke podatke o svim dosadašnjim nastupima
jednog tenisača na turnirima. Element liste sadrži šifru turnira (int) i broj pobjeda na tom turniru
(int). Napisati rekurzivnu funkciju koja će vratiti ukupan broj pobjeda tog tenisača na svim
turnirima.
typedef struct s
{
int sifraTurnira;
int brPob;
struct s *sljed;
} cvor;
struct s{
long matBroj;
char naziv[40+1];
char brZiroRacun[20+1];
char telKontakt[15+1];
struct s *sljed;
};
typedef struct s zapis;
else
return nadji( glava->sljed, mbr );
}
else
return NULL;
}
Napisati rekurzivnu funkciju koja zadani niz znakova ispisuje unatrag (npr. ako je zadan niz
“Abeceda”, funkcija treba ispisati “adecebA”). Funkcija treba imati prototip:
ispisi_unatrag(niz+1);
printf("%c\n",*niz);
}
Kakva je apriorna složenost i što će ispisati sljedeća funkcija ako njen poziv glasi:
Napisati rekurzivnu funkciju koja će izračunati istu sumu reda kao i zadana funkcija f:
double f(int n)
{
double suma = 0;
int i;
for (i = 1; i < n; i++)
suma += 1./(i * (i + 1) * (i + 2));
return suma;
}
Rješenje:
double f(int n)
{
--n;
if (n<1) return 0;
return 1./(n*(n+1)*(n+2)) + f(n);
}
ili
double f(int n)
{
if (n<=1) return 0;
return 1./((n-1)*(n)*(n+1)) + f(n-1);
}
složenost: O(n)
Napisat rekurzivnu funkciju koja traži studenta sa zadanim matičnim brojem kroz
jednostruko povezanu listu. Prototip funkcije je:
Napisati rekurzivnu funkciju koja će odrediti koji se znak u nekom sortiranom znakovnom
polju dimenzije n+1 najčešće pojavljuje. Izlazni argument je nađeni znak, a funkcija vraća broj
pojavljivanja tog znaka. Prototip funkcije je:
tmp = tekst[n];
while (tekst[n-i]== tmp)
i++;
rek = mode (tekst, n-i, znak);
if (rek > i)
return rek;
else
{
*znak=i;
return i;
}
}
Napisat rekurzivnu funkciju koja će obaviti operaciju cijelobrojnog dijeljenja integera a i b
koristeći se samo operacijom oduzimanja. Prototip fuckcije je:
1.) Napisati rekurzivnu funkciju koja će za realni broj x (|x| < 1) izračunati sumu reda:
x3 x5 x7 x 2 n 1
Ar th( x ) x
3 5 7 ( 2n 1)
Funkciji se kao jedan od argumenata predaje broj n koji služi kao uvjet zaustavljanja.
2.) Napisati rekurzivnu funkciju koja će prvo uzlazno a zatim silazno ispisati n članova
aritmetičkog niza s bazom a i udaljenošću članova d (a0 = a , an = a(n+1) +d).
aq
j 0
j
????????????????????????????????????????????????????????????????????????????????????????