Recursion (Özyineleme)

Slides:



Advertisements
Benzer bir sunumlar
Yığınlama Sıralaması (Heap Sort)
Advertisements

Ders İçeriği Ağaç Veri Modeli Tanım ve Gerçekleştirim İkili Ağaç
Yinelemeli Algoritma Analizi & Asimptotik Notasyon
Ayrık Yapılar Algoritma Analizi.
MIT503 Veri Yapıları ve algoritmalar
IT503 Veri Yapıları ve algoritmalar
Dersin Adı:ALGORİTMA GELİŞTİME TEKNİKLERİ Dersin Kodu:YBS506 Konu:Kontrol Yapıları(if / if-else) 2.HAFTA.
BİLEŞİK ATAMA VE DÖNGÜLER
Nöbetçi Kontrollü Döngü
Değişken Bildirimleri
Bölüm 4 – Kontrol İfadeleri:1.kısım
BİLGİSAYAR MÜHENDİSLİĞİNE GİRİŞ
EDUTIME Java Day 4 Serdar TÜRKEL.
MIT503 Veri Yapıları ve algoritmalar Algoritmalara giriş
Soru1: kuvvet(taban,us) Şeklinde bir yinelenen fonksiyon yazın
Özyinelemeli(Recursive) Algoritma Tasarımı
Karar ifadeleri ve Döngüler
Algoritmalar DERS 3 Böl ve Fethet(Divide and Conquer) İkili arama
Özyineli Sıralama Algoritmaları
Bölüm 3 – Yapısal Programlama
BPR152 ALGORİTMA VE PROGRAMLAMA - II
Soru1: Kullanıcıdan iki tam sayı girmesini isteyen ve daha sonra büyük olan sayı ile beraber ‘en büyüktür’ ifadesi yazan, ancak sayılar birbirine eşitse.
Erişim Denetimi, Fonksiyon
PROGRAMLAMA DİLLERİNE GİRİŞ Ders 5: Fonksiyonlar
Veri Yapıları ve Algoritmalar
Özyineleme(Recursion)
For Döngüsü Foreach Döngüsü While Döngüsü
Bir bölme işleminde bölen 8,Bölüm 7, kalan 1ise bölünen Kaçtır?
Recursion (Özyineleme)
YMT219: Veri Yapıları Ders Saatleri: Pazartesi 9:15-12, 17:30-20:15
DÖNGÜLER.
PEER SUPPORT TEAM.
Fonksiyonlar Fonksiyon Tanımı Değer Döndürmeyen Fonksiyonlar
Hazırlayan ve Sunan: Asuman Ezgi Sağkol
Trees, Vectors, Iterators. ADT Abstract Data Type (ADT) vs implementation -Soyut Veri Türleri - Uygulamaları.
Veri Yapıları ve Algoritmaları ders_1
C PROGRAMLAMA FONKSİYONLAR Adres ile Fonksiyon Çağırma Pointer (İşaretçiler) ile Fonksiyon Çağırma Rekürsif Fonksiyonlar.
Bil 102 Bölüm 6 Diziler.
PROGRAM DENETİM DEYİMLERİ
Bil 102 Bölüm 3 Java’da Program Akış Denetimi Bil 1021.
Outline 4.1 Giriş 4.2 Algoritmalar 4.3 Pseudocode 4.4 Kontrol İfadeleri 4.5 if tek-seçimli ifadeler 4.6 if else seçimli ifadeler 4.7 while döngü ifadeleri.
3 Boyutlu Uzay; 2 Üçgen Kesişir mi?
The if statement. if Şartlı kontrol Koşul değimi doğru (1) yada yanlış (0) değeri üretir. Şartın doğru olması durumunda if satırından sonraki değimler.
Problem Yaklaşım Temelleri, Algoritma ve Akış Şeması
Bölme İşlemi.
PROGRAMLAMA Doç.Dr. Murat ÇAKIROĞLU 2015 – 2016 Güz Dönemi Kredi : 3+1
KISIM II Matematiksel Kavram ve Prosedürlerin Gelişimi
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.
Fonksiyonlar.
PROBLEMLER.
Doç. Dr. Cemil Öz SAÜ Bilgisayar Mühendisliği Dr. Cemil Öz.
Hafta2 Rekürsif Algoritmalar
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
Bölüm 4 Seçme Komutları Alıştırmalar
Algoritma ve Programlamaya Giriş Ders 5. C Programlama Dili - 2.
Algoritma ve Programlama
C# ÖRNEK UYGULAMALAR C# Örnek Uygulamalar 1
KONU:İKİ BASAMAKLI SAYILARLA BÖLME İŞLEMİ
Algoritmalar II Ders 14 Çizgelerde tüm ikililer arasında en kısa yollar.
BİLGİSAYAR PROGRAMLAMA Ders 5: Döngüler
FONKSİYONLAR Programlamada fonksiyon kullanmanın en önemli sebebi kodların tekrar edilmesini engellemektir. Örneğin; karekök yada üsalma işlemi yapan bir.
YAPISAL PROGRAMLAMA Hafta-7
Kurucular(Yapıcılar), Yıkıcılar
Recursion (Özyineleme)
NİŞANTAŞI ÜNİVERSİTESİ
NİŞANTAŞI ÜNİVERSİTESİ
Bilgisayar Bilimi Fonksiyonlar-2.
MTM216 GÖRSEL PROGRAMLAMA
10. Ders Floyd-Warshal algoritması
Sunum transkripti:

Recursion (Özyineleme) Dr. Galip AYDIN

Recursion (Özyineleme) nedir? Problemleri daha basit alt problemlere bölerek çözme yöntemi. Alt problemler de kendi içlerinde başka alt problemlere bölünebilir. Alt problemler çözülebilecek kadar küçülünce bölme işlemi durur. Özyinelemeli bir algoritma bir problemi çözmek için problemi iki veya daha fazla alt probleme bölen bir yöntemdir.

Basamak Sayısı Ozyinelemeli Tanim Ornek basamak(n) = 1 -> if (–9 <= n <= 9) 1 + basamak(n/10) -> degilse Ornek basamak(321) = 1 + basamak(321/10) = 1 +basamak(32) = 1 + [1 + basamak(32/10)] = 1 + [1 + basamak(3)] = 1 + [1 + (1)] = 3

Basamak Sayısı int basamakSayisi(int n) { if ((-10 < n) && (n < 10)) return 1 else return 1 + basamakSayisi (n/10); }

Özyineleme f(x) problemini çözmek istiyorsak fakat direkt olarak çözemiyorsak Varsayalım y`nin x`den küçük herhangi bir değeri için f(y)’yi çözebiliyoruz f(x)`i çözmek için f(y)`yi kullanırız Bu yöntemin çalışabilmesi için f(x)`in direkt olarak hesaplanabildiği en az bir x değerinin olması gerekir. (e.g. taban durumu)

Bir Sayının kuvvetini hesaplama static int power(int k, int n) { // k`nın n. üssü if (n == 0) return 1; else return k * power(k, n – 1); }

Toplam Hesaplama public int sum(int num) { int result; if (num == 1) { result = 1; } else { result = num + sum(num - 1); } return result;

Faktoriyel 5! = 5*4*3*2*1 4! = 4*3*2*1 3! = 3*2*1 2! = 2*1 1! = 1 int faktoriyel = 1; for ( int sayac = 5; sayac>= 1; sayac-- ) faktoriyel = faktoriyel *sayac;

Özyinelemeli Faktöriyel public int faktoriyel(int N) { if (N == 0) return 1; return N*faktoriyel(N-1); }

Recursive Factorial

public double faktoriyelGoster(int n, int sayac) { double fakt; if (n <= 0) { System.out.println("Taban Duruma ulasti"); fakt = 1; } else { sayac++; System.out.println(sayac + ". program cagiriyor "); fakt = n * faktoriyelGoster(n - 1, sayac); //System.out.println("Faktoriyel = " + fakt); } System.out.println(sayac + ". programdan Cikiyor "); sayac--; return fakt;

Faktoriyel programında ozyinelemeli metodların çağrılması 1. program cagiriyor 2. program cagiriyor 3. program cagiriyor 4. program cagiriyor 5. program cagiriyor Taban Duruma ulasti 5. programdan Cikiyor 4. programdan Cikiyor 3. programdan Cikiyor 2. programdan Cikiyor 1. programdan Cikiyor

Fibonacci Sayıları

Fibonacci Java public int fibonacci(int sayi) { if ( ( sayi == 0 ) || ( sayi == 1 ) return sayi; else return fibonacci( sayi - 1 ) + fibonacci( sayi - 2 ); }

Fibonacci Metodunun Çalışması

Towers of Hanoi (Hanoi Kuleleri) Legend has it that in a temple in the Far East, priests are attempting to move a stack of golden disks from one diamond peg to another. The initial stack has 64 disks threaded onto one peg and arranged from bottom to top by decreasing size. The priests are attempting to move the stack from one peg to another under the constraints that exactly one disk is moved at a time and at no time may a larger disk be placed above a smaller disk. Three pegs are provided, one being used for temporarily holding disks. Supposedly, the world will end when the priests complete their task, so there is little incentive for us to facilitate their efforts.

Towers of Hanoi

Towers of Hanoi Algoritması Move n - 1 disks from peg 1 to peg 2, using peg 3 as a temporary holding area. Move the last disk (the largest) from peg 1 to peg 3. Move the n - 1 disks from peg 2 to peg 3, using peg 1 as a temporary holding area.

//Towers of Hanoi // recusively move disks through towers public void solveTowers( int disks, int sourcePeg, int destinationPeg, int tempPeg ) { // base case -- only one disk to move if ( disks == 1 ) { System.out.println(sourcePeg + " -> " +destinationPeg ); return; } // end if // recursion step -- move disk to tempPeg, then to destinationPeg // move ( disks - 1 ) disks from sourcePeg to tempPeg recursively solveTowers( disks - 1, sourcePeg, tempPeg, destinationPeg ); // move last disk from sourcePeg to destinationPeg // move ( disks - 1 ) disks from tempPeg to destinationPeg solveTowers( disks - 1, tempPeg, destinationPeg, sourcePeg ); } // end method solveTowers

Towers Of Hanoi Çözüm 1 --> 3 1 --> 2 3 --> 2 2 --> 1 2 --> 3