Özyineleme(Recursion)

Slides:



Advertisements
Benzer bir sunumlar
Yinelemeli Algoritma Analizi & Asimptotik Notasyon
Advertisements

Ayrık Yapılar Algoritma Analizi.
MIT503 Veri Yapıları ve algoritmalar
IT503 Veri Yapıları ve algoritmalar
Fonksiyonlar.
Nesneye Yönelik Programlama
Bölüm 7 Fonksiyonlar GÖSTERGELER Gösterge Tanımı
Kontrol Çevrimleri FOR WHILE DO-WHILE IF-ELSE SWITCH-CASE-DEFAULT
Visual Basic 6.0 Ders Notları
Değişken Bildirimleri
MIT503 Veri Yapıları ve algoritmalar Algoritmalara giriş
Soru1: kuvvet(taban,us) Şeklinde bir yinelenen fonksiyon yazın
Lokal Arama Algoritmaları
Bölüm 10 Yapılar ve Birleşimler
Özyinelemeli(Recursive) Algoritma Tasarımı
Fonksiyonlar ve Alt Programlar
Recursion (Özyineleme)
Özyineli Sıralama Algoritmaları
Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi
Nesneye Dayalı Programlama
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Erişim Denetimi, Fonksiyon
Fonksiyonlar.
While Döngüsü Tekrarlama deyimidir. Bir küme ya da deyim while kullanılarak bir çok kez yinelenebilir. Yinelenmesi için koşul sınaması döngüye girilmeden.
Veri Yapıları ve Algoritmalar
Abdulkerim Karabiber Ozan Gül
Chapter 7: Using Methods. Metotları ve Kodlamayı Gizlemeyi Anlama Metot – Kapsüllenmiş ifadeler serisini gerçekleştiren bir görev – Kullanılan metodun.
SQL de Değişken Tanımlama
FONKSİYONLAR.
Recursion (Özyineleme)
YMT219: Veri Yapıları Ders Saatleri: Pazartesi 9:15-12, 17:30-20:15
Bilgisayar Programlama
JAVA’DA DÖNGÜLER.
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Fonksiyonlar Fonksiyon Tanımı
FONKSİYONLAR İbrahim Onur Sığırcı.
C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz
Algoritmalar ve Programlama I Ders 10: ALTPROGRAM KAVRAMI ve FONKSİYON
4. Hafta1 4. HAFTA. 4. Hafta2 Fonksiyonlar  Büyük problemler, küçük parçalara bölünerek kolay çözülür  Yazılımlar benzer modüller içerirler  Hata ayıklama.
Doç.Dr. Ahmet ÖZMEN Sakarya Üniversitesi
Bölüm 9: Alt Programları Uygulamak
Fonksiyonlar.
Veri Tabanı Yönetimi Dersi 7. Laboratuvarı Arş. Gör. Pınar CİHAN.
1 Değişken alanları Geçici değişkenler Birleşik ifadeler(bloklar) ve değişkenler Değişken Depolama Süresi ve Alanı –Local ve global değişkenler –Static.
Hafta2 Rekürsif Algoritmalar
Programlama Dillerinin Prensipleri
C dili kullanıcıya kendi ihtiyacı olan bir fonksiyonu yazma imkanı vermiştir. Bir sayının faktöriyelini almaya ihtiyaç duyduğumuzu ve aynı zamanda asal.
Algoritma ve Programlama
PHP'de Program Denetimi
Fonksiyonlar ve Diziler
Bölüm 6 Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
C’de Fonsiyonlar Aslı Ergün.
Algoritmalar II Ders 4 Dinamik Programlama Yöntemi.
Algoritmalar II Ders 14 Çizgelerde tüm ikililer arasında en kısa yollar.
FONKSİYONLAR Programlamada fonksiyon kullanmanın en önemli sebebi kodların tekrar edilmesini engellemektir. Örneğin; karekök yada üsalma işlemi yapan bir.
C++ Programming:. Program Design Including
NİŞANTAŞI ÜNİVERSİTESİ
YAPISAL PROGRAMLAMA Hafta-7
Altprogramların gerçeklenmesi
FONKSİYONLAR İbrahim Onur Sığırcı.
Recursion (Özyineleme)
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
Methods 2/22/2019 Java'da Programlama.
Bilgisayar Bilimi Fonksiyonlar-2.
MTM216 GÖRSEL PROGRAMLAMA
İleri Algoritma Analizi
10. Ders Floyd-Warshal algoritması
Sunum transkripti:

Özyineleme(Recursion) Kendini doğrudan veya dolaylı olarak çağıran fonksiyonlara özyineli (recursive) fonksiyonlar adı verilir . Fonksiyonlar kendi kendilerini çağırabilecekleri gibi (direct recursion), çağırdıkları bir fonksiyon tarafından da çağrılabilirler (indirect recursion). Özyineli algoritmalar hemgüçlü algoritmalardır, hem de karmaşık yapıları daha rahat açıklayabilirler. Iterative algoritma döngü yapısını kullanır. Özyineleme algoritması dallanma (branching) algoritmasını kullanır. Fonksiyon özyineli olarak her çağrılışında yerel değişkenler ve parametreler için bellekte yer ayrılır. Her özyinelemeli olarak tanımlanmış problemin iterative çözümüne geçiş yapılabilir.

Bileşenler Temel durum Rekürsif tanımlama Temel duruma indirme mekanizması

Tekil(Unary) Özyineleme function RecursiveFunction ( <parameter(s)> ) { if ( base case ) then return base value else return RecursiveFunction ( <expression> ) } Örnek: Faktoriyel: int factorial ( int n ) if ( n <= 1 ) return 1; return n*factorial(n-1);

Example: Factorial Factorial(4) 4  Factorial(3) 3  Factorial(2) 2  1

Example: Factorial Factorial(4) 4  Factorial(3) 3  Factorial(2) 2  1

Example: Factorial Factorial(4) 4  Factorial(3) 3  Factorial(2) 2  1

Example: Factorial Factorial(4) 4  Factorial(3) 3  2

Example: Factorial Factorial(4) 4  Factorial(3) 3  2

Example: Factorial Factorial(4) 4  6

Example: Factorial Factorial(4) 4  6

Example: Factorial 24

İkili(Binary) Özyineleme Kendi kendine iki veya daha fazla cagri vardır. Ornek – Fibonacci Bir sayilar serisi 0 ve 1 ile baslar. Sonra gelen hersayi kendinden onceki iki sayinin toplami 0, 1, 1, 2, 3, 5, 8, 13, 21,... n; eger n < = 1 f(n) f(n-1) + f(n-2); aksi halde

long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 1 ) + fib( n - 2 ); }

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(2) fib(3) +

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(2) + fib(3) fib(0) fib(1) +

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(2) + fib(3) fib(0) + fib(1)

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(2) + fib(3) + fib(1)

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(2) + fib(3) + fib(1)

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(2) + fib(3) + fib(1)

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(2) + fib(3) + 1

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(2) + fib(3) + 1

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) + 1

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(3) 1 + + 1

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(3) 1 + fib(1) fib(2) + 1 +

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(3) 1 + fib(1) fib(2) + 1 +

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) fib(3) 1 + fib(2) + 1 1 +

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) fib(2) + 1 1 +

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) + 1 1 + fib(2) fib(0) fib(1) +

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) + 1 1 + fib(2) fib(0) fib(1) +

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) + 1 1 + fib(2) fib(1) +

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) + 1 1 + fib(2) fib(1) +

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) + 1 1 + fib(2) + fib(1)

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) + 1 1 + fib(2) + 1

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) + 1 1 + fib(2) + 1

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) + 1 1 + 1 + 1

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + fib(3) + 1 1 + 1 + 1

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + 2 + 1 1 + 1 + 1

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } fib(4) 1 + 2 + 1 1 + 1 + 1

Example: Computation of fib(4) long fib ( long n ) { if ( n <= 1 ) return n ; else return fib( n - 2 ) + fib( n - 1 ); } 3 1 + 2 + 1 1 + 1 + 1

Example: Computation of fib(4) Thus, fib(4) returns the value 3. 3 1 + 2 + 1 1 + 1 + 1

Tail yineleme: • Yineleme çağrısı metodun en sonunda yapılır. public int recFact(int n) { if (n<=1) return 1; else return n * recFact(n-1); } public void tail() ….. tail();

Nontail yineleme • Yineleme çağrısından sonra başka işlemler yapılır (yazdırma v.b.). public int nontail(int n) { if (n > 0) ……. nontail(n-1); Console.WriteLine(n); }

Dolaylı (Indirect) yineleme • Yineleme çağrısı başka bir fonksiyonun içinden yapılır. void A(int n) { if (n <= 0) return 1; n- -; B(n); } void B(int n) A(n);

İçiçe (Nested) yineleme • Yineleme çağrısı içindende yineleme çağrısı yapılır. public int A(int n, int m) { if (n <= 0) return 1; return A(n-1, A(n-1, m-1)); }

İkili Arama binarysearch(int a[],int n,int low,int high) { int mid; if (low > high) return -1; mid = (low + high)/2; if(n == a[mid]) { printf("The element is at position %d\n",mid+1); return 0; } if(n < a[mid]) { high = mid - 1; binarysearch(a,n,low,high); } if(n > a[mid]) { low = mid + 1; }

Bağlı Liste Tersten Yazdırma void print(Elem *list) { if (list != NULL) {print(list->next); cout>>list->bilgi; }

Hızlı Sıralama

Quicksort örnek Sort the array containing: 9 16 4 15 2 5 17 1 Pivot Partition 4 2 5 1 < 9 < 16 15 17 Partition 2 1 4 5 15 16 17 Concatenate 1 2 5 15 17 15 16 17 5 Concatenate 1 2 4 Concatenate 1 2 4 5 9 15 16 17

Birleştirmeli Sıralama

MergeSort Örnek 1 2 3 4 5 6 7 8 2 9 4 5 3 1 6 Divide 8 2 9 4 5 3 1 6 Divide 8 2 9 4 5 3 1 6 Divide 1 element 8 2 9 4 5 3 1 6 Merge 2 8 4 9 3 5 1 6 Merge 2 4 8 9 1 3 5 6 Merge Sorted Array 1 2 3 4 5 6 8 9

Hanoi Kulesi Üç kule (A,B,C) olan bir sistemde yarıçapı birbirinden farklı 4 tane diskin A kulesine yerleştirilir. Kurallar : Bir diskin altında yarıçapı daha küçük bir disk bulunamaz. Bir diskin üzerine yarıçapı daha büyük bir disk yerleştirilemez. Bir anda bir kulenin sadece en üstündeki disk diğer bir kuleye yerleştirilebilir. Bir anda bir disk hareket ettirilebilir. Problemde istenen : B direğinden de yararlanarak tüm disklerin C’ye yerleştirilmesi.