Galvenā atšķirība: Programmējot rekursiju var izskaidrot, ņemot vērā rekursīvo funkciju. Rekursīvā funkcija ir tāda, kas atkārtoti aicina atkārtot kodu. No otras puses, iterācija tiek sasniegta, izmantojot iteratīvu funkciju, kas atveido koda atkārtošanu.
Programmēšanā atkārtojumiem tiek izmantota rekursācija un iterācija. Tie attiecas uz procesu, kas tiek atkārtots vairākas reizes. Rekursija balstās uz pieeju, kurā kaut kas attiecas uz sevi, līdz nosacījums ir izpildīts. Tiek uzskatīts, ka metode ir rekursīva, ja tā var tieši vai netieši izsaukt sevi kā:
{
... vārds () ...
}
vai
spēkā neesošs vārds ()
{
... spēle () ...
}
spēkā neesoša spēle () {
... vārds () ...
}
Lai veiktu veiksmīgu rekursiju, ir jāpatur prātā, ka katram rekursijas procesā veiktam zvanam ir jāvienkāršo aprēķins. Rekursija tiek sasniegta, nosakot pamatgadījumu.
int faktors (int N)
{
ja (N == 0) atgriešanās 1;
cits atgriešanās (N * faktors (N-1));
}
Šajā piemērā rekursiju var viegli redzēt paziņojumā (N * faktors (N-1)), kur tā atkārtoti izsauc faktora funkciju. Rekursija ir ļoti noderīga, jo tā palīdz saīsināt kodu. Tomēr rekursija ir nedaudz lēna izpildījumā.
funkciju faktori (n)
{
var cilpa, rezultāts;
rezultāts = 1;
par (cilpa = 1; cilpa <= n; cilpa ++)
{
rezultāts = rezultāts * cilpa;
}
atgriešanās rezultāts;
}
Šajā piemērā cilpošana tiek panākta, izmantojot veselus skaitļus no 1 līdz n, un cilpa <= n paziņojums tiek izmantots kā kritērijs, lai apturētu tālāku cilpošanu. Tādējādi varam secināt, ka tos pašus rezultātus var sasniegt, izmantojot rekursiju un iterāciju. Tomēr tās abas ir balstītas uz nedaudz atšķirīgām pieejām. Jebkuru rekursīvo algoritmu var rakstīt, izmantojot iterācijas (cilpas).
Recursion un Iteration salīdzinājums:
Rekursija | Iterācija | |
Definīcija | Rekursija attiecas uz rekursīvo funkciju, kurā tā vēlreiz aicina atkārtot kodu. | Iterācija tiek panākta, izmantojot iteratīvu funkciju, kas atveido koda atkārtošanu. |
Svarīgs punkts | Ir jānosaka pamata gadījums | Ir jānosaka izbeigšanas nosacījums |
Veiktspēja | Salīdzinoši lēns | Salīdzinoši ātri |
Atmiņas lietošana | Salīdzinoši vairāk | Salīdzinoši mazāk |
Kods | Mazāks | Ilgāks |
Bezgalīga atkārtošanās | Bezgalīga rekursija spēj crashing sistēmu | Infinite looping atkārtoti izmanto CPU ciklus |
Struktūra | Izvēle | Atkārtojums |
Vietējie mainīgie | Nav nepieciešams | Nepieciešams |