s1[s1.Length - pos - 1]
Keyin bu belgi ToString() metodi bilan o`giriladi. Belgili qatorga (oldingi) rekursiv chaqiruv yordamida satrdagi ketma-ket bo`yicha keyingi belgi qo'shiladi
s1[s1.Length - pos - 1].ToString() + RString(s1, pos + 1)
Funksiya biror qiymat qaytarishi kerakligi sababli satrni qayta ishlash formulasidan oldin return operatori kiritilishi kerak
return s1[s1.Length - pos - 1].ToString() + RString(s1, pos + 1);
RString() funksiyasidan boshqa metodda foydalanish quyidagicha bo'lishi mumkin:
string s;
s = RString("abcd", 0); // s = "dcba"
s = RString("A", 0); // s = "A"
s = RString("", 0); // s = ""
s = RString("www.bestprog.net", 0); // s = "ten.gorptseb.www"
Sartning simmetrikligini aniqlashning rekursiv funksiyasi misoli
i-elementdan j-m elementiga qadar ssatrining simmetrik qismi mavjudligini aniqlaydigan recursiv funksiyani ishlab chiqish.
// Recursiv funksiya satr simmetrik yoki simmetrik emasligini aniqlaydi
// pos parametr i bilan (j-i) / 2 joyini almashtiradi
static bool IsSymmetric(string s, int i, int j, int pos)
{
if ( (i + pos) <= ((j - i) / 2))
{
if (s[i + pos] != s[j - pos]) // satr belgilarini solishtirish
return false;
else
return IsSymmetric(s, i, j, pos + 1); // keyingi ikkita belgini ko'rib chiqish
}
else
return true; // butun satr o'tdi
}
Yuqoridagi funksiya i+pos va j-pos o`rnida turgan belgilar if operator yordamida solishtiriladi
if (s[i + pos] != s[j - pos])
...
pos parametri i qiymatiga qo'shilgan joyi almashtiriladi: i+pos. i va j pozitsiyalari orasida ba'zi diapazonlar mavjud. pos parametrini i dan j diapazonga o'tkazish shart emas. Faqat yarim oraliqni ko'rish kifoya, shuning uchun funksiya tekshirishni o'z ichiga oladi:
if ( (i + pos) <= ((j - i) / 2))
{
...
}
qayerda
((j - i) / 2)
bo`lsa, shart holatiga ko'ra (j-i) oraliq mavjud.
Funksiyani boshqa dasturiy kodda ishlatish
bool b;
b = IsSymmetric("abcd", 1, 3, 0); // b = false
b = IsSymmetric("abcdefed", 3, 7, 0); // b = true
b = IsSymmetric("aaaa", 2, 2, 0); // b = true
b = IsSymmetric("aabbccbbaa", 0, 9, 0); // b = true
b = IsSymmetric("aabbcbbaa", 0, 8, 0); // b = true
b = IsSymmetric("aabbccbaa", 0, 8, 0); // b = false
Do'stlaringiz bilan baham: |