logo

Dodatni tipovi blokova (EBT) - Novo iskustvo rada sa Layout Builder-om❗

Dodatni tipovi blokova (EBT) – stilizovani, prilagodljivi tipovi blokova: slajdšouvi, kartice sa tabovima, kartice, akordeoni i mnogi drugi. Ugrađena podešavanja za pozadinu, DOM Box, javascript dodatke. Iskusite budućnost kreiranja rasporeda već danas.

Demo EBT moduli Preuzmite EBT module

❗Dodatni tipovi pasusa (EPT) – Novo iskustvo rada sa pasusima

Dodatni tipovi pasusa (EPT) – analogni skup modula zasnovan na pasusima.

Demo EPT moduli Preuzmite EPT module

Scroll

PHP lekcije - lekcija 9 - Rekurzija

26/05/2025, by Ivan

U prošloj lekciji smo obradili korišćenje funkcija u PHP-u. Sada ćemo se malo dublje pozabaviti njihovom upotrebom. Do sada smo razmatrali funkcije ovakvog tipa:

<?php
function myFunction(){ // definicija funkcije

}

$x = myFunction(); // poziv funkcije
?>

Ali šta se dešava ako pozovemo funkciju unutar njenog tela?

<?php
function myFunction(){
  $x = myFunction();
  ...
  return $x;
}

$y = myFunction();

Taj poziv funkcije unutar iste funkcije naziva se rekurzija. To može delovati komplikovano u teoriji, ali u praksi je mnogo jednostavnije.

Hajde da napravimo funkciju za računanje stepena broja. Iz kursa algebre verovatno znate da n-ti stepen broja znači da se broj množi sam sa sobom n puta. U PHP-u to izgleda ovako:

<?php
function myDegree($x, $n){
  if($n == 0){
	return 1;
  }
  if($n < 0){
    return myDegree( 1/$x, -$n); // -$n menja znak sa negativnog na pozitivan
  }
  return $x * myDegree($x, $n-1); // poziv funkcije unutar funkcije
}

$y = myDegree(2, -4); // prvi poziv funkcije
print $y;
?>

Detaljno ćemo objasniti ovu funkciju. Počinjemo sa time da posle linije return funkcija prestaje sa izvršavanjem i vraća vrednost navedenu u return.

Prvi if ($n == 0) - ako je stepen 0, vraća se 1. Ovo je jasno i jednostavno: bilo koji broj na nulti stepen je 1. Sledeći if ($n < 0) - ako je stepen negativan, pretvaramo ga u pozitivan, a broj koji se diže na stepen menjamo u njegov recipročni oblik, što je matematički ispravno.

Na kraju, ako stepen nije 0 niti negativan, funkcija se poziva rekurzivno sa smanjenim stepenom za 1 i svaki put množimo broj sa rezultatom prethodnog poziva funkcije.

Hajde da pratimo svaku iteraciju (ponavljanje) funkcije:

1. Stepen -4, broj 2.

Ovde se izvršava drugi if, broj postaje razlomak, a stepen pozitivan.

2. Stepen 4, broj 0,5.

Stepen je pozitivan i nije 0, zato se izvršava:

return $x * myDegree($x, $n-1)

3. Stepen 3, broj 0,5.

4. Stepen 2, broj 0,5.

5. Stepen 1, broj 0,5.

Ovde se aktivira prvi if, vraća se 1, koja se množi sa prethodnim rezultatima, i rekurzija se završava.

Još jedan sličan primer je faktorijal broja. Faktorijal broja n je proizvod svih brojeva od 1 do n. Na primer, faktorijal broja 6 je 6*5*4*3*2*1 = 720. Kao što ste verovatno pretpostavili, koristićemo rekurziju.

<?php
function myRecursion($x){
  if($x == 1){
    return $x;
  }
  return $x * myRecursion($x-1);
}

$y = myRecursion(8);
print $y;
?>

Ovaj primer je još jednostavniji od prethodnog, pa ću vam ostaviti da sami pratite promene parametra u funkciji myRecursion.