Bolu Beyi tarafından yazıldı Haziran - 6 - 2011 2 Yorum
Dinamik Programlama
Recursive yapı

Bugün yazacağım c sharp programı ile istediğimiz sıradaki fibonacci sayısını görebileceğiz. Bununla beraber programa eklediğim sayaç vasıtasıyla kaç kez işlem yapıldığı hakkında da bilgi sahibi olabileceğiz. Aslında Fibonacci sayıları programını daha önceden recursive(öz yinelemeli) yapı kullanarak paylaşmıştım. Şimdi ise hem dinamik programlama hem de recursive yapıyı bir arada kullanarak ikisi arasında bir karşılaştırma yapmış olacağız. Buyrun kodlar(açıklamaları aşağıda):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Bolubeyi.Net
{
class Program
{
static int sayac_recursive = 0;
static int sayac_dinamik = 0;
static void Main(string[] args)
{
int fibonacci_sirasi;
Console.WriteLine(“Bulmak istediğiniz fibonacci sayısını giriniz:”);
fibonacci_sirasi = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(“——-recursive———-“);
Console.WriteLine(“fibonacci({0})={1}”, fibonacci_sirasi, fibonacci_recursive(fibonacci_sirasi – 1));
Console.WriteLine(“Recursive program sayaci={0}”, sayac_recursive);
Console.WriteLine(“——-dinamik programlama———-“);
Console.WriteLine(“fibonacci({0})={1}”, fibonacci_sirasi, fibonacci_dinamik_programlama(fibonacci_sirasi – 1));
Console.WriteLine(“Dinamik programlama sayaci={0}”, sayac_dinamik);
}
public static int fibonacci_dinamik_programlama(int fibonacci_sirasi)
{
sayac_dinamik++;
int[] fibo_sayilar = new int[100];
{
for (int i = 0; i <= fibonacci_sirasi; i++)
{
if (i == 0 || i == 1)
{
fibo_sayilar[0] = 1;
fibo_sayilar[1] = 1;
}
else
{
fibo_sayilar[i] = fibo_sayilar[i – 1] + fibo_sayilar[i – 2];
}

}
return fibo_sayilar[fibonacci_sirasi];
}
}
public static int fibonacci_recursive(int fibonacci_sirasi)
{
if (fibonacci_sirasi <= 1)
{
sayac_recursive++;
return 1;
}
else
{
sayac_recursive++;
return (fibonacci_recursive(fibonacci_sirasi – 1) + fibonacci_recursive(fibonacci_sirasi – 2));
}
}
}
}

Öncelikle programımızda global değişken olarak 2 adet sayaç ekledik. Birisi dinamik, diğeri recursive(öz yinelemeli) fonksiyonumuzda çalışacak. Daha önceden recursive yapıda paylaştığım yazıyı buradan bularak, açıklamalarını okuyabilirsiniz. Dinamik programlamayla arasındaki farkı açıklamak istiyorum; Recursive yapı kullanırken sürekli fonksiyona yolladığımızı görüyorsunuz. Her işlem için tekrar tekrar fonksiyona yolluyoruz. Dinamik programlamada ise bu işlemleri dizide tutuyoruz ve fonksiyon yalnızca 1 kez çalışıyor. Doğal olarak dinamik programlamanın daha avantajlı olduğunu söyleyebiliriz. Zaten bu programı çalıştırdığınızda her iki sayacı da göreceksiniz. Umarım faydalı olmuştur. Tekrar görüşmek üzere…

Bugüne kadar 2 yorum yapıldı

  1. Köroğlu dedi ki:

    Teşekkürler hocam, çok güzel açıklamışsınız.

  2. Bolu Beyi dedi ki:

    Rica ederim 🙂


Time limit is exhausted. Please reload CAPTCHA.