|
using System;
class RevStr
{
// Belgilar satrini teskari tartibda chiqarish metodi
public
|
bet | 85/154 | Sana | 08.01.2024 | Hajmi | 5,29 Mb. | | #131939 |
Bog'liq Majmuausing System;
class RevStr
{
// Belgilar satrini teskari tartibda chiqarish metodi
public void DisplayRev(string str)
{
if (str.Length > 0)
DisplayRev(str.Substring(1, str.Length - 1));
else
return;
Console.Write(str[0]);
}
}
class RevStrDemo
{
static void Main()
{
string s = "Bu test rejimi";
RevStr rsOb = new RevStr();
Console.WriteLine("Kiritilgan satr: " + s);
Console.Write("Teskari satr: ");
rsOb.DisplayRev(s);
Console.WriteLine();
Console.ReadKey();
}
}
Dastur bajarilish natijasida:
Kiritilgan satr: Bu test rejimi
Teskari satr: imijer tset uB
DisplayRev() metodi har doim chaqirilganda u str argumenti bilan ifodalangan belgilar satrining uzunligini tekshiradi. Agar satr uzunligi nolga teng bo‘lmasa, u holda DisplayRev() metodi berilgan satrdan bir belgi kam bo‘lgan yangi satr bilan rekursiv chaqiriladi. Bu metodga nol uzunlikdagi satr uzatilgunga qadar bu jarayon takrorlanadi. Shundan so‘ng, DisplayRev() metodiga barcha rekursiv murojaatlar teskari tartibda ochiladi. Har bir bunday chaqiruvdan so‘ng str argumenti bilan ifodalangan satrning birinchi belgisi chop etiladi va natijada butun satr teskari tartibda chop etiladi.
Ko‘pgina metodlarning rekursiv versiyalari takroriy murojaatlar uchun tizim resurslari tufayli ularning iterativ ekvivalentlariga qaraganda biroz sekinroq ishlashi mumkin. Agar bunday murojaatlar juda ko‘p bo‘lsa, tizim to‘lib ketishi mumkin. Rekursiv metodning parametrlari va lokal o‘zgaruvchilari tizim stekida saqlanganligi va bu metodga har bir yangi chaqiruv, ularning yangi nusxasini yaratganligi sababli bir nuqtada stek tugashi mumkin. Bunday holda, istisno yuzaga keladi va umumiy til ish vaqti (CLR) tegishli istisnoni chiqaradi. Rekursiyaning asosiy afzalligi shundaki, u ba’zi algoritmlarni iterativ usuldan ko‘ra aniqroq va sodda tarzda amalga oshirish imkonini beradi. Masalan, tezkor saralash algoritmini iterativ tarzda amalga oshirish juda qiyin. Rekursiv metodlarni yozayotganda, metod rekursiyasiz qaytishini ta’minlash uchun shartli kod qismini, masalan, agar tegishli joyga qo‘shish zarur. Aks holda, bir marta chaqirilgan rekursiv metod umuman qaytmasligi mumkin. Bunday xatolik dasturlash amaliyotida rekursiyani amalga oshirish uchun juda xosdir. Bunday holda, rekursiv metodda nima sodir bo‘layotganini kuzatish va xatolik yuzaga kelsa, uning bajarilishini to‘xtatish uchun WriteLine() metodidan foydalanish tavsiya etiladi.
Ko‘pincha misol sifatida faktorial yordamida rekursiyalarni o‘rgatilganligini ko‘rish mumkin, xuddi yuqoridagi misoldagidek. Ammo dasturchilar faktorialni haqiqatan ham rekursiya orqali hisoblashga o‘rganib qolishi mumkin. Faktorialni rekursiya bilan hisoblash mumkin, lekin buni oddiy sikl orqali bajarish ancha yaxshi, tezroq va samaraliroqdir.
Rekursiyani o‘rgatish uchun tez tartiblash algoritmini keltirish mumkin. Algoritm massivni ma'lum bir atributga ko‘ra taqsimlashga asoslanadi va massivning har bir yarmi uchun saralashni yana chaqiradi. Ikkinchi bosqichda metod yana ikki qismga bo‘lingan kichikroq massivni oladi. Shunday qilib, har bir bosqichda massiv kichikroq qismlarga bo‘linadi. Ushbu algoritmni rekursiya orqali ko‘rib chiqaylik:
|
| |