5-8 Маъруза Рекурсия


Download 110.5 Kb.
bet1/6
Sana01.01.2023
Hajmi110.5 Kb.
#1074629
  1   2   3   4   5   6
Bog'liq
5-8 Maruza Рекурция(uz)


5-8 - Маъруза
Рекурсия
Рекурсия тушунчаси, рекурсив методлар билан ишлаш

Рекурсия
C# да усул ўз ўзини чақириши мумкин. Бу жараён рекурсия, ўз-ўзини чақирувчи усул эса рекурсив усул дейилади. Умуман олганда, рекурсия ўз-ўзини аниқловчи жараёндир. Бу борада у циклик таърифни эслатади. Рекурив усулда циклдан фарқли ўлароқ, усул ўзичини чақирадиган оператор сақланади. Рекурсия дастурни бошқаришнинг самарали механизмидир.


Рекурсияга классик мисол соннинг факториалини ҳисоблашдир:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1


{
class Program
{
// Рекурсивный метод
static int factorial(int i)
{
int result;

if (i == 1)


return 1;
result = factorial(i - 1) * i;
return result;
}

static void Main(string[] args)


{
label1:
Console.WriteLine("Сонни киритинг: ");
try
{
int i = int.Parse(Console.ReadLine());
Console.WriteLine("{0}! = {1}",i,factorial(i));
}
catch (FormatException)
{
Console.WriteLine("Сон нотўғри");
goto label1;
}

Console.ReadLine();


}
}
}

Шунга алоҳида эътибор бериш лозимки, factorial рекурсив усули ўз-ўзини чақиради, жумладан бунда i ўзгарувчи ҳар чақирилишда 1 га камаяди.
Кўплаб процедураларнинг рекурсив вариантлари ўзининг итерацион эквивалентларига нисбатан усулнинг кўп маротаба чақирилиши ҳисобига секинроқ бажарилиши мумкин. Агарда бундай чақирилишлар жуда ҳам кўп бўлса, у ҳолда охир-оқибат тизимли стек тўлиб кетиши мукиню Рекурсив усулнинг параметрлари ва локал ўзгарувчилари тизимли стекда сақланиб, мазкур ускл чақирилишда уларнинг янги нусхаси яратилгани боис, қандайдир вақтга келиб стек буткул сарф қилинган бўлади. Бундай ҳолатда истисно ҳолат вужудга келади ва умумий ижро этувчи муҳит истиснони генерациялайди. Аммо бу ҳақда рекурсив процедура нотўғри бажарилгандагина қайғуриш лозим.
Рекурсиянинг асосий афзаллиги шундаки, у итерацион усулга қараганда айрим алгоритмларни аниқроқ ва соддароқ кўринишда амалиётга жорий этиш имконини беради. Масалан, тезкор саралаш алгоритмини итерацион усулда амалиётга жорий этиш қийин. Аммо, суньий интеллект сингари айрим масалалар айнан рекурсив ечимни талаб қилади.
Рекурсив усулларни ёзишда мос ўринда усулдан рекурсиясиз қайтишни ташкил этиш учун if шартли операторни кўрсатиб ўтиш лозим. Акс ҳолда бир маротаба чақирилган рекурсив усулдан умуман қайтмаслик ҳам мумкин. Бундай турдаги хатолик дастурлаш амалиётида рекурсияни ташкил этиш учун хосдир. Бундай ҳолатда рекурсив усулда содир бўлаётган жараёнларни кузатиш ва хатолик вужудга келганда жараённи тўхтатиш учун WriteLine() усулни чақирувчи операторлардан фойдаланиш тавсия этилади.

Download 110.5 Kb.

Do'stlaringiz bilan baham:
  1   2   3   4   5   6




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling