Við ætlum að ræða rakningar, eða recursions, á ensku.(Ekki spyrja.. Fann þetta í Ensk-Ísl. orðabók).
Við notumst við forritunartungumálið C í þessari grein.
Rakningar eru einfaldar við fyrstu hugsun, en þegar lengra kemur, getur maður orðið ansi pirraður. Hérna sjáið þið einföldustu rakningu sem þið getið gert(Í C):
unsigned int recursion() { recursion(); /* Recursion kallar sjálfann sig, sem kallar sjálfann sig, sem kallar sjálfan sig, og svo framvegis. */ return 0; // <- Ætti aldrei að gerast. } int main() { recursion() // Förum inní recursion fallið return 0; // Ætti heldur aldrei að gerast. }
Greining:
Hvað er það sem gerist? Það sem gerist, er að forritið startar, kallar svo recursion, sem kallar sjálfan sig, sem kallar sjálfan sig.. Etc.
Taka má til greina, að flest tösk sem hægt er að leysa með rakningum, er hægt að leysa sem öðrum endurtekandi föllum, eins og lykkjum.
Þetta er heldur ekki skilvirkasta forritunar aðferðin að nota, þegar maður gæti verið að t.d. sortera stór gögn. Því í hvert skipti sem fallið er kallað, eru bæði parametrarnir, og return addressan ýtt á stakkinn, sem á endanum gæti valdið yfirflæði, sem bæði gæti étið upp minnið þitt, og fleygt forritinu á hausinn. :)
Hérna sjáið þið dæmi um hvernig maður gæti notað rakningar til að finna út factorial fyrir tölu:
int factorial(int n) { if(n <= 1) { return 1; } else { return (n * factorial(n-1)); } }
Greining:
Fallið factorial tekur inn tölu, í breytu sem við köllum n. Síðan athugum við hvort breytan n er minni, eða jöfn og 1. Ef svo er, þá skilar fallið 1.
Ef svo er ekki, þá skilar fallið n margfaldað með því sem fallið factorial(n-1).
Þú gætir hugsað: En bíddu hægur, hvernig getur þetta þá skilað af sér afkomunni þegar þetta skilar bara einn á endanum ?
Það er af því að þegar fyrsta atvik skilar ekki af sér endanlega, fyrr en það er búið að rekja alla leiðina í gegnum öll föllin, þangað til það að n er 1, og fallið skilar af sér einum.
Semsagt, þegar það er búið að rekja alveg í gegn, þangað til það hættir að kalla sjálfann sig, þá stökkva öll föllin til baka, þangað til á endanum skila þau 5!.
Best er að sýna þetta með því að rekja þetta frá síðasta fallinu.
Síðasta fallið skilar 1.
Annað fallið skilar 2(2 * 1)
Þriðja fallið skilar 3(3 * 2)
Fjórða fallið skilar 4(6 * 4)
Fimmta er 5(5 * 24)
1 * 2 * 3 * 4 * 5 = 5! = 120.
Í framtíðinni, ef/þegar þið ákveðið að notast við rakningar, ekki reyna að rekja ykkur í gegnum föllin þegar þið fáið einhverskonar villu - Þá leið liggur geðveiki. Frekar bara að endurskrifa rakninguna.
Allavega, ég vona að ykkur hafi líkað við þessa grein, og að hún hafi hjálpað ykkur að skilja rakningar.