Əsas Fərq – Rekursiya və İterasiya
Rekursiya və İterasiya proqramlaşdırma problemlərini həll etmək üçün istifadə edilə bilər. Rekursiya və ya iterasiyadan istifadə etməklə problemin həllinə yanaşma problemin həlli yolundan asılıdır. Rekursiya ilə iterasiya arasındakı əsas fərq ondan ibarətdir ki, rekursiya eyni funksiya daxilində bir funksiyaya zəng etmək mexanizmidir, iterasiya isə verilmiş şərt doğru olana qədər bir sıra təlimatları təkrar-təkrar yerinə yetirməkdir. Rekursiya və İterasiya alqoritmlərin hazırlanması və proqram təminatının yaradılması üçün əsas üsullardır.
Rekursiya nədir?
Funksiya funksiya daxilində özünü çağırdıqda, o, Rekursiya kimi tanınır. İki növ rekursiya var. Bunlar sonlu rekursiya və sonsuz rekursiyadır. Sonlu rekursiyanın bitirmə şərti var. Sonsuz rekursiyanın dayandırma şərti yoxdur.
Rekursiya faktorialları hesablamaq üçün proqramdan istifadə etməklə izah edilə bilər.
n!=n(n-1)!, əgər n>0
n!=1, əgər n=0;
3(3!=321 faktorialını hesablamaq üçün aşağıdakı koda baxın).
intmain () {
int dəyəri=faktorial (3);
printf(“Faktorial %d\n”, dəyər);
qayıt 0;
}
infaktorial (daxili) {
əgər(n==0) {
qayıt 1;
}
başqa {
qaytarma n faktorial(n-1);
}
}
Faktorial (3) çağırarkən, bu funksiya faktorial (2) çağıracaq. Faktorial (2) çağırarkən, bu funksiya faktorial (1) çağıracaq. Sonra faktorial (1) faktorial (0) çağıracaq. faktorial (0) 1-i qaytaracaq. Yuxarıdakı proqramda “if blokunda” n==0 şərt əsas şərtdir. Eyni şəkildə, faktorial funksiya təkrar-təkrar çağırılır.
Rekursiv funksiyalar yığınla əlaqəlidir. C dilində əsas proqram bir çox funksiyaya malik ola bilər. Beləliklə, main () çağıran funksiyadır və əsas proqram tərəfindən çağırılan funksiya çağırılan funksiyadır. Funksiya çağırıldıqda idarəetmə çağırılan funksiyaya verilir. Funksiya icrası başa çatdıqdan sonra idarəetmə əsas funksiyaya qaytarılır. Sonra əsas proqram davam edir. Beləliklə, icraya davam etmək üçün aktivləşdirmə qeydi və ya yığın çərçivəsi yaradır.
Şəkil 01: Rekursiya
Yuxarıdakı proqramda əsasdan faktorial (3) çağırarkən zəng yığınında aktivləşdirmə qeydi yaradır. Sonra stek üzərində faktorial (2) stek çərçivəsi yaradılır və s. Aktivləşdirmə qeydində yerli dəyişənlər və s. haqqında məlumat saxlanılır. Funksiya hər dəfə çağırılanda yığının yuxarı hissəsində yerli dəyişənlərin yeni dəsti yaradılır. Bu yığın çərçivələri sürəti yavaşlata bilər. Eynilə, rekursiyada funksiya özünü çağırır. Rekursiv funksiya üçün zaman mürəkkəbliyi dəfələrlə tapılır, funksiya çağırılır. Bir funksiya çağırışı üçün vaxt mürəkkəbliyi O(1)-dir. N sayda rekursiv zəng üçün vaxt mürəkkəbliyi O(n) təşkil edir.
İterasiya nədir?
İterasiya verilmiş şərt doğru olana qədər təkrarlanan təlimatlar blokudur. İterasiya “for loop”, “do-while loop” və ya “while loop” istifadə etməklə həyata keçirilə bilər. “for loop” sintaksisi aşağıdakı kimidir.
üçün (başlamaq; şərt; dəyişdirmək) {
// bəyanatlar;
}
Şəkil 02: “dövrə axını diaqramı üçün”
İnsiallaşdırma addımı əvvəlcə yerinə yetirilir. Bu addım loop nəzarət dəyişənlərini elan etmək və işə salmaqdır. Şərt doğrudursa, əyri mötərizələrin içərisindəki ifadələr yerinə yetirilir. Bu ifadələr şərt doğru olana qədər icra olunur. Şərt yalnışdırsa, idarəetmə “for loop”dan sonra növbəti ifadəyə keçir. Döngü daxilində ifadələri yerinə yetirdikdən sonra idarəetmə dəyişdirmə bölməsinə keçir. Döngə nəzarət dəyişənini yeniləmək üçündür. Sonra vəziyyət yenidən yoxlanılır. Şərt doğrudursa, əyri mötərizələrin içərisindəki ifadələr yerinə yetiriləcəkdir. Bu şəkildə "for loop" təkrarlanır.
"while loop"da dövrə daxilindəki ifadələr şərt doğru olana qədər yerinə yetirilir.
həm (vəziyyət){
//bəyanatlar
}
“do-while” dövrəsində vəziyyət dövrənin sonunda yoxlanılır. Beləliklə, dövrə ən azı bir dəfə yerinə yetirilir.
edin{
//bəyanatlar
} isə(vəziyyət)
İterasiyadan (“for loop”) istifadə edərək 3 (3!) faktorialını tapmaq üçün proqram aşağıdakı kimidir.
int main(){
intn=3, faktorial=1;
inti;
for(i=1; i<=n; i++){
faktorial=faktoriali;
}
printf(“Faktorial %d\n”, faktorial);
qayıt 0;
}
Rekursiya və İterasiya arasında hansı oxşarlıqlar var?
- Hər ikisi problemi həll etmək üçün texnikadır.
- Tapşırıq rekursiya və ya iterasiya ilə həll edilə bilər.
Rekursiya və İterasiya Arasındakı Fərq Nədir?
Rekursiya vs İterasiya |
|
Rekursiya eyni funksiya daxilində funksiyanı çağırmaq üsuludur. | İterasiya verilmiş şərt doğru olana qədər təkrarlanan təlimatlar blokudur. |
Kosmos Mürəkkəbliyi | |
Rekursiv proqramların məkan mürəkkəbliyi iterasiyalardan yüksəkdir. | Kosmos mürəkkəbliyi təkrarlamalarda daha azdır. |
Sürət | |
Rekursiyanın icrası yavaşdır. | Normal olaraq, iterasiya rekursiyadan daha sürətli olur. |
Vəziyyət | |
Sonlandırma şərti yoxdursa, sonsuz rekursiya ola bilər. | Şərt heç vaxt yanlış olmazsa, sonsuz iterasiya olacaq. |
Stack | |
Rekursiyada stek funksiya çağırıldıqda yerli dəyişənləri saxlamaq üçün istifadə olunur. | İterasiyada yığın istifadə edilmir. |
Kod oxunaqlılığı | |
Rekursiv proqram daha oxunaqlıdır. | İterativ proqramı oxumaq rekursiv proqramdan daha çətindir. |
Xülasə – Rekursiya və İterasiya
Bu məqalə rekursiya və iterasiya arasındakı fərqi müzakirə etdi. Hər ikisi proqramlaşdırma problemlərini həll etmək üçün istifadə edilə bilər. Rekursiya ilə iterasiya arasındakı fərq ondan ibarətdir ki, rekursiya eyni funksiya daxilində funksiyanı çağırmaq və verilmiş şərt doğru olana qədər bir sıra təlimatları təkrar-təkrar yerinə yetirmək üçün onu təkrarlamaq mexanizmidir. Problemi rekursiv formada həll etmək olarsa, onu təkrarlamalar vasitəsilə də həll etmək olar.
Rekursiya və İterasiyanın PDF Versiyasını endirin
Bu məqalənin PDF versiyasını yükləyə və sitat qeydinə əsasən onu oflayn məqsədlər üçün istifadə edə bilərsiniz. Zəhmət olmasa PDF versiyasını buradan endirin Rekursiya və İterasiya Arasındakı Fərq