Özyineleme (Recursion)

Benzer belgeler
ALGORİTMA ANALİZİ. Cumhuriyet Üniversitesi Bilgisayar Mühendisliği Bölümü

ÖZYİNELEME (RECURSION)

ÖZYİNELEME (RECURSION)

Özyineleme {\} /\ Suhap SAHIN Onur GÖK

ÖZYİNELEME RECURSION. Yrd. Doç. Dr. Aybars UĞUR

YZM ALGORİTMA ANALİZİ VE TASARIM DERS#3: ALGORİTMA ANALİZİ#2

ÖZYİNELEME RECURSION. Doç. Dr. Aybars UĞUR

BİL-142 Bilgisayar Programlama II

ENF102 TEMEL BİLGİSAYAR BİLİMLERİ VE C/ C++ PROGRAMLAMA DİLİ. Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü

Eln 1002 Bilgisayar Programlama II

Mühendislik Fakültesi Elektrik-Elektronik Mühendisliği C Programlama 7. Bölüm Metot Tanımlama ve Kullanma

YIĞINLAR YIĞINLAR. Yığın İşlemleri Postfix, Prefix, Infix. G. Ü. Bilgisayar Mühendisliği Bölümü

Özyineleme (Recursion)

Örnek: İki fonksiyondan oluşan bir program. Fonksiyon Tanımı

ALGORİTMA VE PROGRAMLAMA I

ELN1001 BİLGİSAYAR PROGRAMLAMA I

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

ALGORİTMA VE PROGRAMLAMA I

Programlama Dilleri. C Dili. Programlama Dilleri-ders08/ 1

Yrd. Doç. Dr. Caner ÖZCAN

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

Algoritma ve Programlama II Recursive Fonksiyonlar Dosyalama

BLM 112- Programlama Dilleri II. Hafta 2 C Programlarının Bellek Düzeni ve Rekürsif (Özyinelemeli) Fonksiyonlar

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Özyineleme (recursion)

Yrd. Doç. Dr. Caner ÖZCAN

BLM-112 PROGRAMLAMA DİLLERİ II. Ders-1 Kapsama Kuralları & Rasgele Sayı Üretimi & Rekürsif (Özyinelemeli) Fonksiyonlar

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Python ile Programlamaya Giriş DERS 9: FONKSİYONLAR DR. HÜSEYİN BAHTİYAR

11- FONKSİYONLAR (FUNCTIONS)

Nesne Yönelimli Programlama

BİLG Dr. Mustafa T. Babagil 1

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

Yrd. Doç. Dr. Caner ÖZCAN

Fonksiyonlar. Yrd.Doç.Dr.Bülent Çobanoğlu

ÖDEV (Vize Dönemi) CEVAPLAR. 1. Ekrana Merhaba Dünya! yazdıran algoritmanın akış diyagramını çiziniz ve sözde kod olarak yazınız.

C++ Dersi: Nesne Tabanlı Programlama

BİLGİSAYAR PROGRAMLAMA. Algoritma ve Akış Şemaları

F(A, N, K) // A dizi; N, K integer if N<0 then return K; if A[N]>K then K = A[N]; return F(A, N-1, K);

Yrd. Doç. Dr. A. Burak İNNER Bilgisayar Mühendisliği

Örnek 4: Örnek Özyinelemeli fonksiyon örneği Bölüm 9. C++ programlama dilinde Nesne ve sınıf

BİL1001 Bilgisayar Bilimlerine Giriş 1

Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama

1 PROGRAMLAMAYA GİRİŞ

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

C Programlama Dili (MCS116) Ders Detayları

3.Hafta Master Teorem ve Böl-Fethet Metodu

MAK 1005 Bilgisayar Programlamaya Giriş. Fonksiyonlar. Prof. Dr. Necmettin Kaya

Yrd. Doç. Dr. Caner ÖZCAN

NESNEYE YÖNELİK PROGRAMLAMA

Değişkenler, içerisinde tek bir değer tutabilen yapılardır. Örneğin haftanın günlerini değişkenlerde tutmak istersek, her bir gün adı için bir

BMT 101 Algoritma ve Programlama I 11. Hafta. Yük. Müh. Köksal Gündoğdu 1

YAPILAR (STRUCTURES)

SAKARYA ÜNİVERSİTESİ BİLGİSAYAR VE BİLİŞİM BİLİMLERİ FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ GÜZ DÖNEMİ PROGRAMLAMAYA GİRİŞ DERSİ

Merge Sort Bireşen Sıralama

BLM 112- Programlama Dilleri II. Hafta 4 İşaretçiler (Pointers)

BLM 111 Algoritma ve Programlama I Güz 2018

ALGORİTMA VE PROGRAMLAMA II

İLERİ ALGORİTMA ANALİZİ-2

Dinamik Programlama. En uzun ortak altdizi En uygun altyapı Altproblemlerin çakışması

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

Algoritma Analizi Big O

DİZİLER-KATARLAR ALGORİTMA VE PROGRAMLAMA II

Programlama Dilleri 3

Göstericiler (Pointers)

8. İŞARETCİLER (POINTERS)

KRİPTOANALİZ DERSİ FİNAL ÖDEVİ. PSO ile TRANSPOSITION CIPHER ÇÖZÜMÜ

BLM-111 PROGRAMLAMA DİLLERİ I. Ders-12 Fonksiyonlar. Yrd. Doç. Dr. Ümit ATİLA

YMT219 VERİ YAPILARI ÖDEV-1

Zeki Optimizasyon Teknikleri

enum bolumler{elektronik, insaat, bilgisayar, makine, gida};

BLM 111 ALGORİTMA VE PROGRAMLAMA I

7. FONKSİYONLAR. Dönüş_Tipi Fonksiyon_Adı (tip giriş_parametreleri);

ÖZEL EGE LİSESİ FİBONACCİ DİZİLERİ YARDIMIYLA DEĞERİNİ HESAPLAYAN BİR FORMÜL

/ C Bilgisayar Programlama Final Sınavı Test Soruları. Adı soyadı :... Öğrenci no :... İmza :... Tarih, Süre : , 60 dak.

Bölüm 10. Altprogramları Uygulamak

Chapter 8. Komut düzeyi kontrol yapıları ISBN

Algoritma Analizi. Özelliklerinin analizi Algoritmanın çalışma zamanı Hafızada kapladığı alan

Kıyametin Kopacağı Gün (Hanoi Bilmecesi)

İNÖNÜ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ 2. SINIF 1. DÖNEM VERİ YAPILARI DERSİ LABORATUAR ÖDEVİ

Bölüm 9. Altprogramlar ISBN

Sunum İçeriği. Programlamaya Giriş

HSancak Nesne Tabanlı Programlama I Ders Notları

Diziler (Arrays) Çok Boyutlu Diziler

Yrd. Doç. Dr. Caner ÖZCAN

YÖNEYLEM ARAŞTIRMASI - III

2.Hafta Algoritmaların Analizi. Araya Yerleştirme Sırlaması (Insert Sort) Birleştirme Sıralaması (Merge Sort ) Yinelemeler

Akış Konrol Mekanizmaları

YZM 2116 Veri Yapıları

AHMET YESEVİ ÜNİVERSİTESİ BİLİŞİM SİSTEMLERİ VE MÜHENDİSLİK FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ LİSANS DÖNEM ÖDEVİ

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

BM102 BİLGİSAYAR PROGRAMLAMA II LABORATUVAR UYGULAMALARI. 3Hafta

YZM 2116 Veri Yapıları

Pointer Kavramı. Veri Yapıları

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

HSancak Nesne Tabanlı Programlama I Ders Notları

Transkript:

Özyineleme tanımlamaları Özyineleme çağırma Tail özyineleme Nontail özyineleme Dolaylı (Indirect) özyineleme İçiçe (Nested) özyineleme Yrd.Doç.Dr. M. Ali Akcayol Kendi kendisini doğrudan veya dolaylı olarak çağıran fonksiyonlara özyineli (recursive) fonksiyonlar adı verilir. Özyineleme bir problemi benzer şekilde olan daha küçük parçalara bölünerek çözülmesini sağlayan bir tekniktir. Özyineleme, döngülere (iteration) alternatif olarak kullanılabilir. 1

Bir problem özyineli olmayan basit bir çözüme sahiptir (stopping case, base case). Problemin diğer durumları özyineleme ile durdurma durumuna (stopping case) indirgenebilir. Özyineleme işlemi durdurma durumu sağlanınca sonlandırılır. Genel yazımı: if (durdurma durumu sağlandıysa) çözümü yap else problemi özyineleme kullanarak indirge n! = 1 * 2 * 3 * * ( n 1 ) * n Faktoriyel işlemini özyineli tanımlamak için küçük sayıların faktöriyeli şeklinde tanımlamak gerekir. n! = n * ( n 1 )! Durdurma durumu 0! = 1 olarak alınır. Her çağırmada n değeri bir azaltılarak durdurma durumuna ulaşılır. Özyineli tanımlama: n! = 1 if n = 0 n! = n*(n 1)! if n > 0 2

Aşağıdaki kod çalıştığında n sayısının faktöriyel değerini hesaplar. public int recfact(int n) if ( n == 1 ) return( 1 ); else return( h * recfact( n - 1 )); n! değerini hesaplar ve bulduğu değeri return ile gönderir. recfact( 5 ) için çalışmasının stack ile gösterimi a = 1 Return 2*1! a = 2 Return 3*2! a = 3 Return 4*3! a = 4 Return 5*4! a = 5 a = 1 Return 2*1! a = 2 Return 3*2! a = 3 Return 4*3! a = 4 a = 4 Return 5*4! Return 5*4! a = 5 a = 5 a = 5 Başlama 4. çağırmadan sonra a = 2*1 = 2 Return 3*2! a = 3 Return 4*3! a = 4 Return 5*4! a = 5 1. çağırmadan sonra a = 3*2 = 6 Return 4*3! a = 4 Return 5*4! a = 5 4. çağırmadan sonra a = 4*6 = 24 Return to L4 a = 5 a = 5*24 = 120 Sonuç 3

recfact(3); için gerçekleşen işlemler aşağıdaki gibidir. Recursive Iterative public int recfact(int n) if(n ==1) return(1); else return( h * recfonk( n - 1 )); public int itefonk(int n) int aradeger = 1; for (int i = n; i > 0; i- -) aradeger * = i; return aradeger; 4

Genellikle iterative fonksiyonlar zaman ve yer bakımından daha etkindirler. - 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. Özyineleme problemin çözümünü basitleştirebilir, sonuç genellikle kısadır ve kod kolayca anlaşılabilir. Her özyinelemeli olarak tanımlanmış problemin iterative çözümüne geçiş yapılabilir. Örnek : Fibonacci dizisinin özyineleme ile bulunması: Fibonacci dizisinde her eleman kendinden önceki iki elemanın toplamı şeklinde hesaplanır. 0, 1, 1, 2, 3, 5, 8, 13, 21, 34,... 0.eleman : 0 1.eleman : 1 2.eleman : 0+1 = 1 3.eleman : 1+1 = 2 4.eleman : 1+2 = 3 5.eleman : 2+3 = 5 5

Örnek : Fibonacci dizisinin özyineleme ile bulunması (devam): Fibonacci dizisinin tanımı: fib(n) = n if ((n==0) (n==1)) fib(n) = fib(n-2) + fib(n-1) if (n>=2) Fibonacci dizisi program: public int recfib(int n) if (n<=1) return n; else return recfib(n-1)+recfib(n-2); Örnek : Hanoi Kuleleri Problemi : N adet disk bir kulede iken diğer kulelerden birisine hepsi aynı sırada yerleştirilecek Hiçbir zaman büyük disk küçük diskin üzerine gelmeyecek. A kaynak kule, C hedef kule ve B ise ara geçişlerde kullanılacak geçici kuledir. 6

Örnek : Hanoi Kuleleri Problemi (devam): (n-1) disk C kulesi geçici kullanılarak B ye aktarılabilirse A daki n. disk doğrudan C ye aktarılabilir. A daki 1 diski doğrudan A dan C ye aktarabiliriz. B deki tüm diskler A kulesi kullanılarak C ye aktarılır. public void han(int n, char s, char d, char t) if (n == 1) listbox1.items.add(s + " -> " + d); else han(n-1, s, t, d); han(1, s, d, t); han(n-1, t, d, s); han(4, A, C, B); n = 3 K n = 2 K s=a, d=c, t=b s=a, d=b, t=c n = 1 s=a, d=c, t=b n = 3 K n = 2 K n = 1 s=a, d=c, t=b s=a, d=b, t=c A -> C n = 3 K n = 2 L n = 1 s=a, d=c, t=b s=a, d=b, t=c A -> B n = 3 K n = 2 M n = 1 s=a, d=c, t=b s=a, d=b, t=c C -> B n = 3 s=a, d=c, t=b L n = 2 A -> C public void han(int n, char s, char d, char t) if (n == 1) listbox1.items.add(s + " -> " + d); else han(n-1, s, t, d); // K han(1, s, d, t); // L han(n-1, t, d, s); // M 7

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(); 8

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);... nontail(n-1); 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) if (n <= 0) return 1; n- -; A(n); 9

İç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)); Haftalık Ödev: n adet x değeri için standart sapmayı (σ) bulan programı iterasyon ve recursive ile yapınız. σ = V V = ( 1 / ( n 1 )) (x k -xm) 2 k xm = ( 1 / n ) x k σ = standart sapma V = varyans değeri xm = mean değeri k 10