Blogger Tricks

14 Aralık 2009 Pazartesi

Rekürsif (Recursive) Algoritmalar

Bilgisayar Programcılığında problem çözmek için bilgisayara komut dizileri verilir. Bu dizilerin çoğu akış diyagramında doğrusal bir karar ağacını işler. Ancak Recursive (özyinelemeli) algoritma oldukça sibernetik bir şekilde kendini tekrar tekrar çalıştıran, aradığı şartlara ulaşana dek durmayan bir yöntemi anlatır.

Recursive (özyinelemeli) algoritmalar, asla aynı şekilde uygulanmıyor. Bir işlem yapılır ve oluşan sonuç tartışılıyor böylece bir sonraki döngüde bu sonuçtan yola çıkılarak farklı bir giriş sisteme geri veriliyor.

Recursive, çözülmesi zor bir problemin, yapı olarak aslına benzeyen ancak, çözülmesi daha kolay olan ufak problemlere bölünerek çözülmesidir. Aynı işlem oluşturulan tüm ufak problemler için tekrarlanır. Ne zaman alt problem o kadar kolay ve açık hale gelir de artık çözülmesi için daha ufak parçalara bölünmesi gerek kalmaz, işte o zaman bu bulunan çözümler birleştirilerek esas problemin çözümü meydana getirilir.

Özyineleme’ye en iyi örnek faktöriyel fonksiyondur. Recursive tanımlaması;

recursive_faktoriyelBu tanımlama bize şunu verir;

recursive_faktoriyel2

recursive_faktoriyel_agacı

Fibonacci sayıları ile Recursive tanımlamak kolay olmasına rağmen çok yavaştır. Örneğin; F5’i hesaplamak istiyoruz, Recursive algoritmanız F4 ve F3'ü isteyecektir. F4 için ise F3 ve F2'yi hesaplamamız gerekli. Yukarıdaki şekilde görüldüğü üzere F3'ü iki kez hesaplamak zorundayız. Eğer F200'ü hesaplamış olsaydık ağaç gösterimi nasıl olurdu?

Fibonacci sayıları etkili ama genel tanımlamalarda yeterli değil.

n.ci Fibonacci sayısını hesaplamanında bir formülü var;

altın_oran

Recursive algoritmasına bir kaç örnek;

  • Bir ağacın yaprakları arasındaki mesafe (Fibonacci’nin bir kopyasıdır.)
  • Faktöriyel
  • Hanoi Kuleleri
  • EBOB (En Büyük Ortak Bölen)
  • İkili arama algoritması

Kaynaklar;

http://www.gunesintamicinde.com/hayat-denen-recursive-algoritma/
http://www.cargalmathbooks.com/5%20Recursive%20Algorithms.pdf
http://en.wikipedia.org/wiki/Recursion_(computer_science)

6 yorum :

Güzel anlatmışınız gerçekten fakat ben yine anlamadım :((

rekürsif demişsin ancak içerik boş beş para etmez. hani bunun verim analizi. maliyet hesabı yok notasyonu yok iki şekil koy gitsin millet alışmış zaten çakma bilgilere. sağdan soldan çakma bilgilerle olmaz bu iş. öğrencilerine acırım başka bir şey değil yani.

Sayın Adsız;

Bu yazının yayınlanma tarihi üzerinde yazdığı gibi 2009'dur.
Bu yazı yazdığım zaman ben ÖĞRENCİYDİM.
Tekrarlıyorum;
Üniversite'de ÖĞRENCİYKEN yazdığım bir yazı idi.
Ayrıca ben BÖTE ÖĞRENCİSİYDİM. Bir Mühendis kadar ayrıntılı şekilde almadım bu dersi. Bizim için mantığını anlamış olmak yeterli idi.

Maalesef haklısınız böte mezunu olmak ile MÜHENDİSLİK mezunu olmak arasındaki fark burada ortaya çıkıyor. Biri önüne geleni hazır yer biri ise işin mutfanda işi hakkıyla öğrenir gerçi mühendislerle yarışabilecek sadece Elektronik ve Bilgisayar Eğitimi bölümleri vardı ama onlarıda korkudan kapattılar. Neyse konumuza geri dönelim bazen bir şeyi yayınlıyorsan hekkını vererek yayılamak gerekir yoksa ben öğrenciyken mantığı ile olmaz. Heleki öğr. gr. ünvanı kullanıyorsan ve siten varsa sürekli siteni güncel tutmalısın öğrencilik okul koridorlarında kaldı artık akademisyenlik iddiası güdülüyorsa bu iddiaya yaraşır olmalı sunulan bilgiler

Tabii ki, bu da sizin görüşünüz. Fikir çeşitliliği önemlidir, saygı duymak lazım.
Daha aktif blog yazan akademisyenleri takip ediyorsunuzdur muhtemelen. Lütfen paylaşın, örnek alalım.

Elestiriler yapici olmali bence yikici degil. Tamam begenmeyebilirsiniz. o zaman baska yerlerde arayabilirsiniz bulmak istediklerinizi, ya da dedigim gibi kibar bir dille nasil daha iyi olabilirdi soyleyebilirsiniz. Bu arada Ege universitesinde matematik bolumu opsiyonlara ayriliyor ve bilgisayar opsiyonunda yazilim uzerine her ayrintiyi görüyoruz.

Yorum Gönder