Rekursiya

Rekursiya (en. recursion) – proqramın özü-özünü çağıra bilməsi. Çox da böyük olmayan sadə proqramların bəzi alqoritmləri rekursiv yerinə yetirilə bilər, ancaq bu halda yaxşı sürətə, yaxud işin səmərəliliyinə zəmanət olmur. Rekursiyadan həddindən artıq istifadə olunması, faktiki olaraq, proqramın yerinə yetirilməsi zamanı onun stek fəzasından çıxmasına səbəb ola bilər ki, bunun da nəticəsində, adətən, proqram dayanır və hətta sistemdə qəza vəziyyəti də yarana bilər. Eyni növ məsələlərdən ibarət olan məsələləri həll etməyin təbii yolu rekursiyadan istifadə etməkdir. Məsələn, müəyyən növ fraktalların (FRACTAL) çəkilməsi; sintaktik təhlil (PARSİNG); çeşidləmə (SORT); matrisi oxşar matrislərə parçalamaqla onun determinantının hesablanması zamanı rekursiyalar çox səmərəli olur. Tam ədədin faktorialının (FACTORİAL) hesablanmasında da rekursiyadan istifadə edilə bilər. Faktorialın tapılmasını nəzərdə tutan rekursiyaya sadə misal aşağıdakı kimi təyin olunur: 1. 0 və ya 1-in faktorialı 1-ə bərabərdir. 2. İstənilən böyük tam x ədədinin faktorialı, x – 1 ədədinin faktorialı ilə x ədədinin hasilinə bərabərdir.

Bu tərif ikinci addımda rekursivdir, çünki bir faktorialı tapmaq üçün başqa bir faktorialı tapmaq lazımdır. Bu alqoritmi birbaşa rekursiv kompüter proqramına çevirmək olar (bax R-xx). Şübhəsiz, bu heç də ən sürətli hesablama deyil, ancaq o, klassik nümunədir. Proqramda factorial funksiyası özünü çağıranda rekursiya başlayır.

class factorial_program {

 /* Java program to find the factorial of a
    whole number (4 in this example) by recursion */
 static int factorial(int x)
 {
   System.out.println(“Now looking for factorial of ” + x);
   int z=1;
   if (x<=1)
   {
     z=1; 
   }
   else
   {
     z=x*factorial(x–1);  /* this is the recursive step */
   }
      System.out.println(“The factorial of ” + x + “ is ” + z);
      return z;
    }
    public static void main(String args[])
    {
      System.out.println(factorial(4));
    }
  }

Xarici keçidlər

[redaktə | mənbəni redaktə et]