Autor Zpráva
10011010
Profil *
ahoj,

co se týče rychlosti, je lepší rekurzivni funkce nebo spíše to udělat do cyklu?
Měsíček
Profil
Si udělej malý bench test, ne?
BetaCam
Profil
10011010

Cyklus by měl být na 99% rychlejší.
10011010
Profil *
Měsíček
nevím jak

BetaCam
děkuju
Zivan
Profil *
Cyklus rychlejsi, ale casto o dost neprehlednejsi :)
Timy
Profil
BetaCam
Z jakého důvodu?
Timy
Profil
Ale vychází to, alespoň v tomto příkladu:
function fac_cyklus($n) 
{
    $fac = 1;
    
    for($i = 1; $i <= $n; $i++)
    {
		$fac *= $i;
	}

	// echo "faktorial: ".$fac;
}

function fac_rek($n, $i)
{
	
	
	if($n <= 1)
	{
		// echo $i;
	}
	else
	{
		fac_rek($n-1, $i *= $n);
	}	
}

function fac_rek_2($n)
{
	if($n <= 1)
	{
		return 1;
	}
	else
	{
		return $n * fac_rek_2($n - 1);
	}
}

// Cyklus
$time = microtime(true);
for($i=0; $i<10000; $i++)
	fac_cyklus(50);
	
echo "<br>Cas cyklu: ";
echo (microtime(true) - $time);


// Rekurze
$time = microtime(true);

for($i=0; $i<10000; $i++)
	fac_rek(50, 1);
	
echo "<br>Cas rekurze: ";
echo (microtime(true) - $time);


// Koncova rekurze
$time = microtime(true);

for($i=0; $i<10000; $i++)
	fac_rek_2(50);
	
echo "<br>Cas koncove rekurze: ";
echo (microtime(true) - $time);


Výsledek je:
Cas cyklu: 0.159802913666
Cas rekurze: 0.584051132202
Cas koncove rekurze: 0.435553073883
bohyn
Profil
Timy
fce ma vlastni rezii na zavolani - kopirovani parametru v pameti + ulozeni aktualniho program counteru, a pri returnu zalsi kopirovani vysledku + zmena program counteru. A mozna jeste neco dalsiho
Zivan
Profil *
Hodne zjednodusene u kazdeho volani funkce a navratu z ni se provadi dalsi cinnosti okolo a ty pri cyklu nejsou.
bohyn
Profil
Timy
To co si napsal nema zadnou vypovidajici hodnotu, jake jsou ty fce?
Edit: fce pridany sorry
Timy
Profil
bohyn
Já je tam zapomněl nakopírovat, už tam jsou.
bohyn
Profil
Timy
Hezky priklad

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: