<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>recursive fonksiyon analizi arşivleri - Görkem Rıdvan ARIK</title>
	<atom:link href="https://gorkemarik.com/tag/recursive-fonksiyon-analizi/feed/" rel="self" type="application/rss+xml" />
	<link>https://gorkemarik.com/tag/recursive-fonksiyon-analizi/</link>
	<description>Yazılım Geliştirme &#38; Mühendislik</description>
	<lastBuildDate>Thu, 19 Sep 2024 17:00:07 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9</generator>

<image>
	<url>https://gorkemarik.com/wp-content/uploads/2024/09/unnamed.jpg</url>
	<title>recursive fonksiyon analizi arşivleri - Görkem Rıdvan ARIK</title>
	<link>https://gorkemarik.com/tag/recursive-fonksiyon-analizi/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Recursive (Özyinelemeli) Fonksiyon Analizi #1 Iteration Method (Tekrarlama Yöntemi)</title>
		<link>https://gorkemarik.com/algoritma-analizi/recursive-ozyinelemeli-fonksiyon-analizi-iteration-method-tekrarlama-yontemi/</link>
					<comments>https://gorkemarik.com/algoritma-analizi/recursive-ozyinelemeli-fonksiyon-analizi-iteration-method-tekrarlama-yontemi/#respond</comments>
		
		<dc:creator><![CDATA[Görkem Rıdvan ARIK]]></dc:creator>
		<pubDate>Tue, 17 Sep 2024 16:04:56 +0000</pubDate>
				<category><![CDATA[Algoritma Analizi]]></category>
		<category><![CDATA[Analiz]]></category>
		<category><![CDATA[Recursive Fonksiyonlar]]></category>
		<category><![CDATA[algoritma analizi]]></category>
		<category><![CDATA[iteration method]]></category>
		<category><![CDATA[recursive fonksiyon analizi]]></category>
		<category><![CDATA[tekrarlama yöntemi]]></category>
		<guid isPermaLink="false">https://gorkemarik.com/?p=289</guid>

					<description><![CDATA[<p>Iteration metodu, bir recursive denklemi çözmek için kullanılan tekniklerden biridir. T(n) denklemini ardışık adımlarla açarak, fonksiyonun kapalı formunu (closed form) elde etmeye çalışır. Bu yöntemin 5 temel adımdan oluşur.</p>
<p><a href="https://gorkemarik.com/algoritma-analizi/recursive-ozyinelemeli-fonksiyon-analizi-iteration-method-tekrarlama-yontemi/">Recursive (Özyinelemeli) Fonksiyon Analizi #1 Iteration Method (Tekrarlama Yöntemi)</a> yazısı ilk önce <a href="https://gorkemarik.com">Görkem Rıdvan ARIK</a> üzerinde ortaya çıktı.</p>
]]></description>
										<content:encoded><![CDATA[
<div style="height:58px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading"><strong>Giriş</strong></h4>



<p>Öz yinelemeli fonksiyonlar kendi içerisinde tekrar tekrar kendisini çağıran fonksiyonlardır. Tam da bu yüzden bu algoritmaların analizini yapmak standart fonksiyonlara göre daha zahmetlidir.</p>



<p>Algoritma analizi kapsamında recursive olmayan fonksiyonların analizi standart yöntemlerle kolay bir şekilde gerçekleştirilebilirken recursive fonksiyonlarda işler biraz karışabiliyor. Bu fonksiyonların analizini gerçekleştirmek için birkaç yöntem bulunmaktadır. Bu yazıda bir özyinelemeli algoritmanın analiz analiz yöntemlerinden bahsederek <strong>Iteration Methodu</strong> ile <strong>Hanoi Kuleleri</strong> algoritmasının analizini gerçekleştireceğiz.</p>



<p>Temel olarak 2 adım ile bu fonksiyonların analizi gerçekleştirilebilir:</p>



<ol class="wp-block-list">
<li><a href="/algoritma-analizi/recursive-ozyinelemeli-fonksiyonlarda-zaman-denklemini-bulma/">Algoritmanın zamana bağlı denkleminin <strong><em>T(n)</em></strong> elde edilmesi.</a></li>



<li>Elde edilen denklemin <strong><em>Substitution, Iterasyon, Recursion</em></strong> <strong><em>Tree</em></strong> veya <strong><em>Master </em></strong>yöntemleriyle çözülmesi.</li>
</ol>



<p>Birinci adım için daha önce yazmış olduğum <strong><em><a href="/algoritma-analizi/recursive-ozyinelemeli-fonksiyonlarda-zaman-denklemini-bulma/">Recursive (Özyinelemeli) Fonksiyonlarda Zaman Denklemini Bulma</a></em></strong> yazımı okuyabilirsiniz.</p>



<p>Bu yazıda ikinci adım olan <strong><em>T(n)</em></strong>&#8216;i bilinen bir algoritmanın <strong><em> Iteration</em></strong> teoremini kullanarak analizini gerçekleştireceğiz.</p>



<div style="height:58px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading"><strong>Iteration (İterasyon-Yineleme) Metodu</strong></h4>



<p>Iteration metodu, bir recursive denklemi çözmek için kullanılan tekniklerden biridir. T(n) denklemini ardışık adımlarla açarak, fonksiyonun kapalı formunu (closed form) elde etmeye çalışır. Bu yöntemin temel adımları şu şekilde sıralanabilir:</p>



<ol class="wp-block-list">
<li><a href="#denklemin-bulunmasi">T(n) denkleminin bulunması</a></li>



<li><a href="#denklemin-acilmasi">Bulunan T(n)&#8217;in tekrar tekrar açılması</a></li>



<li><a href="#genelleme-yapilmasi">Genelleme yapılması, genel bir ifade bulunması</a></li>



<li><a href="#durdurma-kosulu">Durdurma koşulunun hesaplanması</a></li>



<li><a href="#kapali-form">Kapalı formun elde edilmesi</a></li>
</ol>



<p>Şimdi bu adımları Hanoi Kuleleri algoritması üzerinde sırayla gerçekleştireceğiz. Analize geçmeden önce kısaca Hanoi Kuleleri algoritmasına değinebiliriz.</p>



<div style="height:58px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading"><strong>Hanoi Kuleleri Algoritması</strong></h4>



<p>Kısaca bir çubuk üzerindeki blokları diğer çubuğa en altta en büyük en üstte ise en küçük blok olacak şekilde taşınmasını hedefleyen algoritmadır ve aşağıdaki görsel ile anlatılabilir. Yalnız bu işlemi gerçekleştirmek için 2 kural bulunuyor. <strong>Her hamlede yalnızca 1 blok hareket ettirilebilir</strong> ve <strong>hiçbir hamlede küçük bir bloğun üstünde büyük bir blok olamaz.</strong></p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img fetchpriority="high" decoding="async" width="617" height="130" src="https://gorkemarik.com/wp-content/uploads/2024/09/image-5.png" alt="" class="wp-image-413" srcset="https://gorkemarik.com/wp-content/uploads/2024/09/image-5.png 617w, https://gorkemarik.com/wp-content/uploads/2024/09/image-5-300x63.png 300w" sizes="(max-width: 617px) 100vw, 617px" /></figure>
</div>


<p></p>



<p class="has-text-align-left">Bu algoritmayı koda dökecek olursak aşağıdaki gibi bir recursive fonksiyon yazabiliriz. Blokları A çubuğundan C çubuğuna taşımak istiyoruz.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">package main

func main() {
	hanoi(3, "A", "C", "B")
}

func hanoi(n int, from, to, aux string) {
	if n &gt;= 1 {
		hanoi(n-1, from, aux, to)
		move(from, to)
		hanoi(n-1, aux, to, from)
	}
}

func move(from, to string) {
	println("Move disk from", from, "to", to)
}</pre></div>



<p>Şimdi analiz adımlarına geçebiliriz.</p>



<div style="height:58px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading" id="denklemin-bulunmasi"><strong><a href="#denklemin-bulunmasi">1) T(n) denkleminin bulunması</a></strong></h4>



<p>Recursive fonksiyon çağırımlarının ikisi de n-1 kez çalışacaktır. Dolayısıyla ikisine de <em>T(n-1)</em> diyebiliriz. ortadaki move fonksiyonu ise herhangi bir recursive çağırım yapmadığı için <em>O(1)</em> diyebiliriz. Oluşan ifadeleri topladığımızda T(n) denklemini <strong><em>T(n)=2T(n-1)+1</em></strong> şeklinde elde ederiz.</p>


<div class="wp-block-image">
<figure class="aligncenter size-large"><img decoding="async" width="1024" height="462" src="https://gorkemarik.com/wp-content/uploads/2024/09/image-6-1024x462.png" alt="" class="wp-image-418" srcset="https://gorkemarik.com/wp-content/uploads/2024/09/image-6-1024x462.png 1024w, https://gorkemarik.com/wp-content/uploads/2024/09/image-6-300x135.png 300w, https://gorkemarik.com/wp-content/uploads/2024/09/image-6-768x346.png 768w, https://gorkemarik.com/wp-content/uploads/2024/09/image-6.png 1178w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>
</div>


<div style="height:58px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading" id="denklemin-acilmasi"><strong><a href="#denklemin-acilmasi">2) Bulunan T(n)&#8217;in Tekrar Tekrar Açılması</a></strong></h4>



<p>Denklemimizde O(1) yerine sabit olarak c yazabiliriz. Ardından n yerine birkaç kez fonksiyonun kendi değerini yazarak tekrar tekrar açtığımızda aşağıdaki gibi <strong><em>8T(n-3)+7c</em> </strong>ifadesini elde edeceğiz.</p>



<figure class="wp-block-image size-full"><img decoding="async" width="608" height="248" src="https://gorkemarik.com/wp-content/uploads/2024/09/image-9.png" alt="" class="wp-image-425" srcset="https://gorkemarik.com/wp-content/uploads/2024/09/image-9.png 608w, https://gorkemarik.com/wp-content/uploads/2024/09/image-9-300x122.png 300w" sizes="(max-width: 608px) 100vw, 608px" /></figure>



<div style="height:58px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading" id="genelleme-yapilmasi"><strong><a href="#genelleme-yapilmasi">3) Genelleme yapılması, genel bir ifade bulunması</a></strong></h4>



<p>Elde ettiğimiz <strong>T(n)=<em>8T(n-3)+7c</em></strong> ifadesini biraz düzenleyelim. 8 yerine <strong><em>2^3</em></strong> ve 7 yerine <strong><em>2^3 &#8211; 1</em></strong> yazabiliriz. İfademizin son hali şöyle olur:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="347" height="50" src="https://gorkemarik.com/wp-content/uploads/2024/09/image-12.png" alt="" class="wp-image-433" srcset="https://gorkemarik.com/wp-content/uploads/2024/09/image-12.png 347w, https://gorkemarik.com/wp-content/uploads/2024/09/image-12-300x43.png 300w" sizes="auto, (max-width: 347px) 100vw, 347px" /></figure>
</div>


<p>Fark edildiği üzere bu ifadede 3 sayısı ortak bir hale geldi. 3 yerine <strong><em>k</em></strong> yazalım. Şu ifadeyi elde ederiz:</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="417" height="56" src="https://gorkemarik.com/wp-content/uploads/2024/09/image-13.png" alt="" class="wp-image-434" srcset="https://gorkemarik.com/wp-content/uploads/2024/09/image-13.png 417w, https://gorkemarik.com/wp-content/uploads/2024/09/image-13-300x40.png 300w" sizes="auto, (max-width: 417px) 100vw, 417px" /></figure>
</div>


<p>Böylelikle ifadeyi genelleştirerek değişkenli bir hale dönüştürdük. Sonraki adıma geçebiliriz.</p>



<div style="height:58px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading" id="durdurma-kosulu"><strong><a href="#durdurma-kosulu">4) Durdurma koşulunun hesaplanması</a></strong></h4>



<p>Durdurma koşulunun hesaplanması adımı ifadede T içerisini sıfıra eşitlemekten geçer. Yani <strong><em>n-k = 0</em></strong> ifadesini çözmemiz gerekir. Sonuç olarak <strong><em>n=k</em></strong> elde ederiz. Durdurma koşulumuzu <strong><em>n</em> </strong>olarak elde ettik. </p>



<div style="height:58px" aria-hidden="true" class="wp-block-spacer"></div>



<h4 class="wp-block-heading" id="kapali-form"><strong><a href="#kapali-form">5) Kapalı formun elde edilmesi</a></strong></h4>



<p>Son adımda ise bir önceki adıma bulduğumuz durdurma koşulunu denklemde k yerine yazmamız gerekiyor. </p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="489" height="170" src="https://gorkemarik.com/wp-content/uploads/2024/09/image-14.png" alt="" class="wp-image-438" srcset="https://gorkemarik.com/wp-content/uploads/2024/09/image-14.png 489w, https://gorkemarik.com/wp-content/uploads/2024/09/image-14-300x104.png 300w" sizes="auto, (max-width: 489px) 100vw, 489px" /></figure>
</div>


<p>Eğer T(0)=0 ise;</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="164" height="36" src="https://gorkemarik.com/wp-content/uploads/2024/09/image-15.png" alt="" class="wp-image-439"/></figure>
</div>


<p>Sabitler asimptotik büyüme hızını etkilemeyeceğinden dolayı yaptığımız analiz sonucu algoritmanın çalışma süresi <strong><em>O(2^n) </em></strong>elde edilir.</p>


<div class="wp-block-image">
<figure class="aligncenter size-full"><img loading="lazy" decoding="async" width="221" height="97" src="https://gorkemarik.com/wp-content/uploads/2024/09/image-16.png" alt="" class="wp-image-440"/></figure>
</div><p><a href="https://gorkemarik.com/algoritma-analizi/recursive-ozyinelemeli-fonksiyon-analizi-iteration-method-tekrarlama-yontemi/">Recursive (Özyinelemeli) Fonksiyon Analizi #1 Iteration Method (Tekrarlama Yöntemi)</a> yazısı ilk önce <a href="https://gorkemarik.com">Görkem Rıdvan ARIK</a> üzerinde ortaya çıktı.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://gorkemarik.com/algoritma-analizi/recursive-ozyinelemeli-fonksiyon-analizi-iteration-method-tekrarlama-yontemi/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
