Jet School Logo

Recursion nədir?

Rekursiya — proqramlaşdırmada bir funksiyanın özünü, daxilində, müəyyən bir şərt ödənənə qədər təkrar-təkrar çağırmasıdır. Sadə desək, funksiya öz işini görmək üçün özünün kiçildilmiş versiyasına müraciət edir və bu proses "əsas hal (base case)" adlanan dayanma nöqtəsinə çatana qədər davam edir. Rekursiya, mürəkkəb bir məsələni özü ilə eyni növ, lakin daha kiçik alt-məsələlərə bölərək həll etmək üçün istifadə olunan güclü alqoritmik üsuldur.

Rekursiyanın əsas məqsədləri:

  1. Mürəkkəb məsələni sadələşdirmək – böyük bir problemi eyni məntiqə malik, lakin daha kiçik hissələrə bölərək həll etmək.
  2. Kodu daha qısa və oxunaqlı etmək – bəzi məsələləri (ağac, qraf strukturları kimi) dövr (loop) ilə yazmaq mürəkkəb olduğu halda, rekursiya ilə bir neçə sətirdə həll etmək mümkündür.
  3. Təbii rekursiv strukturları əks etdirmək – fayl qovluqları, ağac strukturları, fraktal şəkillər kimi öz-özünü təkrarlayan strukturları məntiqi şəkildə emal etmək.
  4. "Böl və hökm et" (Divide and Conquer) strategiyasını tətbiq etmək – böyük məlumat massivlərini sıralamaq və axtarmaq üçün istifadə olunan effektiv metodların əsasını təşkil etmək.

Rekursiya necə işləyir?

Hər rekursiv funksiyanın iki əsas hissəsi olur: əsas hal (base case)rekursiv hal (recursive case). Əsas hal funksiyanın özünü çağırmağı dayandırdığı şərtdir — bu olmadan funksiya sonsuz şəkildə özünü çağırar və proqram xəta verər. Rekursiv hal isə funksiyanın öz-özünü, məsələni bir addım kiçildərək yenidən çağırdığı hissədir.

Məsələn: Bir ədədin faktorialını hesablayarkən (məsələn, 5! = 5×4×3×2×1), funksiya deyir: "5-in faktorialını tapmaq üçün, əvvəlcə 4-ün faktorialını tap, sonra onu 5-ə vur". 4-ün faktorialını tapmaq üçün isə 3-ün faktorialı lazımdır — bu proses 1-ə çatana qədər (əsas hal) davam edir, sonra bütün nəticələr geriyə doğru vurularaq son cavab hesablanır.

Rekursiya ilə bağlı əsas terminlər:

  1. Base Case (Əsas hal) – rekursiyanın dayandığı, funksiyanın özünü artıq çağırmadığı şərt.
  2. Recursive Case (Rekursiv hal) – funksiyanın özünü, məsələni kiçildərək yenidən çağırdığı hissə.
  3. Stack Overflow – əsas hal düzgün müəyyən olunmadıqda, funksiya sonsuz çağırılır və yaddaş (stack) daşaraq proqramın xəta ilə dayanmasına səbəb olur.
  4. Tail Recursion (Quyruq rekursiyası) – funksiyanın son əməliyyat olaraq özünü çağırdığı, yaddaşdan daha səmərəli istifadə edən rekursiya növü.
  5. Direct və Indirect Recursion – funksiyanın birbaşa özünü, yoxsa başqa funksiya vasitəsilə dolayı şəkildə özünü çağırması.

Rekursiya ilə Döngü (Loop) arasındakı fərq:

Rekursiya — funksiyanın özünü çağıraraq təkrarlanmasıdır, hər çağırış yaddaşda (stack) yeni yer tutur. Döngü isə for və ya while kimi struktur vasitəsilə eyni kod blokunu təkrar icra etməkdir, əlavə yaddaş sərf etmir. Rekursiya adətən daha az kodla, daha "təbii" oxuna bilən həll təqdim edir (xüsusən ağac və qraf strukturlarında), amma döngü ilə müqayisədə daha çox yaddaş istifadə edir və düzgün yazılmasa stack overflow xətasına səbəb ola bilər. Ona görə də hər iki üsulun nə vaxt istifadə olunacağını bilmək vacibdir.

Rekursiyanın faydaları:

  • Ağac (tree) və qraf (graph) strukturları kimi mürəkkəb məlumat strukturlarını təbii şəkildə emal edir
  • Kodun oxunaqlığını artırır — bəzi məsələlər rekursiya ilə bir neçə sətirdə həll olunur
  • "Böl və hökm et" prinsipinə əsaslanan sürətli sıralama (Quick Sort) və sürətli axtarış (Binary Search) kimi alqoritmlərin əsasını təşkil edir
  • Riyazi anlayışların (faktorial, Fibonaççi ardıcıllığı) proqram kodunda təbii şəkildə ifadə olunmasına imkan verir

Sadə müqayisə:

Təsəvvür edin ki, rekursiya rus matryoşka kuklalarıdır — hər kukla özündən kiçik başqa bir kuklanı içində saxlayır, bu proses ən kiçik, artıq açıla bilməyən kuklaya (əsas hal) çatana qədər davam edir; sonra isə kuklalar geriyə doğru bir-bir bağlanaraq bütöv nəticə formalaşır.

İstəyirsiniz ki, bu biliyi praktikaya keçirib real nəticələr əldə edəsiniz? IT və Kompüter Mühəndisliyi kursumuzla addım-addım öyrənməyə başlayın. Ətraflı məlumat üçün linkə keçid edin: IT və Kompüter Mühəndisliyi kursu

Tədris sahələrimiz barədə məlumat almaq üçün qeydiyyatdan keçin

IT Sahəsini öyrənməyə başla