Iteratsiya chaqiruvlariga nisbatan rekursiya yaratish quyidagi kamchiliklarga ega:
berilgan algoritm uchun rekursiv chaqiruvlar iteratsiyaga ko'ra sekinroq ishlaydi. Bu metodlarning takroriy chaqiruvlariga tizim resurslarni qo'shimcha sarflashi bilan bog'liq;
metodlarni qayta-qayta chaqirish tizimi stekining toshib ketishiga olib kelishi mumkin. Bunday holda, CLR muhiti tegishli istisno vaziyatni keltirib chiqaradi. Shuning uchun, rekursiv metodni ishlab chiqishda parametrlar va lokal o'zgaruvchilar sonini minimal e`lon qilish juda muhim ahamiyatga ega.
Rekursiyaga doir amaliy misollar.
Ketma-ketlikning yig`indisini hisoblash misoli
Ketma-ketlikning yig`indisini hisoblashda rekursiv funksiyadan foydalanish
S = 5 + 10 + 15 + … + 5·n,
n>0 bo`lgan hol uchun.
Funksiya ning dastur kodi quyidagicha
// Yig`indi funksiyasi
static int S(int n)
{
if (n == 1)
return 5;
else
return 5 * n + S(n - 1);
}
Qatot konvertatsiyasi misoli«AAABCCCCAADDDEF» => «3AB4C2A3DEF»
Bu funksiya rekursiya orqali juda qulay tarzda hal etiladi. Ushbu namunaga ko'ra, siz har qanday qoidalar bo'yicha satrlarni boshqaradigan rekursiv funksiya larni ishlab chiqishingiz mumkin.
ConvertStr() rekursiv funksiya si butun qatorni qayta ko'rib chiqadi. Har bir rekursiv chaqiruvda satrning bitta belgisi qayta ishlanadi. Amaldagi qayta ishlanayotgan belgida funksiyaning tegishli rekursiv chaqiruviga mos pozitsiya mavjud.
Recursiv funksiya quyidagi parametrlarni o'z ichiga oladi:
qayta ishlanayotgan s satri string tipida;
rekursiyadagi joriy holat uchun belgining s satrdagi o`rnini aniqlovchi o`zgaruvchi. s[pos] chartipidagi belgi;
Do'stlaringiz bilan baham: |