Ha egy implementáció során iteráció és rekurzió közül kell választanotok, melyiket választjátok?
Figyelt kérdés
Melyik az optimális(abb)?2017. jan. 20. 19:04
3/16 A kérdező kommentje:
Például faktoriális számításnál:
int faktorialis (int n)
{
if (n<=1) {return 1;}
return n*faktorialis(n-1);
}
Vagy ez?
int faktorialis (int n)
{
int eredmeny = 1;
int i = 2;
while(i <= n) {
eredmeny = eredmeny*i;
i++;
}
return eredmeny;
}
2017. jan. 20. 19:15
4/16 anonim válasza:
Az első elegánsabb a második gyorsabb.
5/16 anonim válasza:
"Az első elegánsabb a második gyorsabb."
És memóriaigényesebb, mármint az első.
De én is az elsőt javasolnám. Erőforrás van, ha n < végtelen akkor nincs gond és a kód is olvashatóbb.
6/16 anonim válasza:
A rekurzió általában elegánsabbá teszi a kódot, viszont ha egy feladatot meg tudsz oldani iteratívan megközelítőleg azonos műveletigénnyel, akkor célszerűbb azt választani. A rekurzió gyengéje a függvényhívások stackelődése, ami kellően magas szintű rekurzió esetén akár a stack túlcsordulását is okozhatja.
7/16 anonim válasza:
Mindig ki kell számolni/mérni mivel mennyi műveletet és memóriát spórolsz! Illetve belevenni, hogy a memóriafoglalás általában költségesebb.
Szóval nincs általános elv. Van ahol a rekurzió ezerszer gyorsabb, van ahol az iteráció ezerszer gyorsabb.
8/16 anonim válasza:
Ennél a példánál tökmindegy, Clang és a GCC is optimalizálják, ugyan annyi idő alatt fut le mindkét implementáció.
9/16 anonim válasza:
Annyiban nem mindegy, hogy a rekurzív megoldás fölösleges memóriaterhelést hoz a képletbe.
10/16 anonim válasza:
"és a GCC is optimalizálják"
GCC O0-nál is optimalizálta? Próbáltad?
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!