Keskeinen ero: Ohjelmoinnissa rekursio voidaan selittää rekursiivisella toiminnolla. Rekursiivinen toiminto on sellainen, joka kutsuu itseään toistamaan koodin. Toisaalta iterointi saavutetaan iteratiivisella funktiolla, joka silmukoi toistaa osan koodista.
Ohjelmoinnissa käytetään sekä rekursiota että iteraatiota toistojen saavuttamiseksi. Ne viittaavat prosessiin, joka toistetaan useita kertoja. Rekursio perustuu lähestymistapaan, jossa jokin viittaa itseensä siihen asti, kunnes ehto täyttyy. Menetelmän sanotaan olevan rekursiivinen, jos se voi kutsua itsensä joko suoraan tai välillisesti -
{
... nimi () ...
}
tai
tyhjä nimi ()
{
... peli () ...
}
tyhjä peli () {
... nimi () ...
}
Onnistuneen rekursiota varten on muistettava, että jokainen rekursioprosessissa tehty puhelu on yksinkertaistettava laskemista. Rekursio saavutetaan määrittelemällä perustapa.
int factorial (int N)
{
jos (N == 0) palaa 1;
muuten palaa (N * tekijä (N-1));
}
Tässä esimerkissä rekursio voidaan helposti nähdä lausunnossa (N * faktoriaalinen (N-1)), jossa se kutsuu uudelleen tekijätoimintoa. Rekursio on erittäin hyödyllinen, koska se auttaa lyhentämään koodia. Rekursio on kuitenkin hieman hidas.
toimintatekijä (n)
{
var-silmukka, tulos;
tulos = 1;
ja (silmukka = 1; silmukan <= n; silmukka ++)
{
tulos = tulos * silmukka;
}
tuotto;
}
Tässä esimerkissä silmukointi saavutetaan käyttämällä kokonaislukuja 1: stä n: een, ja silmukan <= n-lausetta käytetään kriteerinä lopettamaan edelleen silmukointi. Näin ollen voidaan päätellä, että samat tulokset voidaan saavuttaa käyttämällä rekursiota ja iteraatiota. Ne molemmat perustuvat kuitenkin hieman erilaisiin lähestymistapoihin. Minkä tahansa rekursiivisen algoritmin voi kirjoittaa myös iteraatioilla (silmukoilla).
Rekursioiden ja iteroinnin vertailu:
rekursio | iteraatio | |
Määritelmä | Rekursio viittaa rekursiiviseen toimintoon, jossa se kutsuu itseään toistamaan koodin. | Iteraatio saavutetaan iteratiivisella funktiolla, joka silmukoi toistamaan osan koodista. |
Tärkeä pointti | Perusasio on määritettävä | Lopetuksen ehto on määritettävä |
Esitys | Verrattain hidas | Verrattain nopea |
Muistin käyttö | Verrattain enemmän | Verrattain vähemmän |
Koodi | pienemmät | Kauemmin |
Äärettömän toiston | Ääretön rekursio pystyy kaatamaan järjestelmän | Ääretön silmukointi kuluttaa CPU-syklejä toistuvasti |
Rakenne | Valinta | Toisto |
Paikalliset muuttujat | Ei vaadittu | Vaaditaan |