İPUCU

Python Artificial Intelligence’da en çok kullanılan dildir ve gerekli dökümanların paylaşım alanlar burada paylaşılmaktadır.

Seçenekler

Rekursion()

ALcatraz' - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
05/2013
Nereden:
İstanbul
Mesajlar:
4.266
Konular:
1022
Teşekkür (Etti):
968
Teşekkür (Aldı):
1757
Ticaret:
(0) %
26-07-2017 19:39
#1
Post
Rekursion()
Rekursion()

Rekursion'un sonsuzluk ile bir ilişkisi var. Ben biliyorum ki rekursion'un sonsuzluk ile bir ilişkisi var.
Ihan3t rekursion'un sonsuzluk ile bir ilişkisi olduğunu bildiğimi düşünüyor. Osman %100 biliyor ihan3tin, rekursion'un sonsuzluk ile bir ilişkisi olduğunu ve bunu bildiğimi düşündüğünü. Ama biz inanmıyoruz Osmanın %100 bildiğine, ihan3tin düşündüğüne ve benim rekursion'un sonsuzluk ile bir ilişkisi olduğunu bildiğime.

Mesela bu konuşma oyununu örnek olarak alabiliriz. Bu örnek Rekursion sanatının doğal anlatımı. Bizim bütün düşüncelerimiz, rekursion ile bağdaşıyor.

Rekursion kelimesi latinceden "recurrere" den geliyor ve anlamı "Geri gitmek, geri koşmak". Aslında bu kelimenin anlamı Rekursion fonksiyonlarının ne yaptığını anlamaniza yetiyordur umarım. Evet şimdi olayları elimize alalım, olayın matematik tarafı anlaması kolay ve sizin rekursion programlamanızı kolaylaştırır. Evet bizde fakültede ki geleneklere uyup bu yazımda fonksiyonumuzu geleneklere göre anlatalım.

Matematiksel olarak böyle tanımlanmıştır;

Kod:
n! = n * (n-1)!, if n > 1 and f(1) = 1
Sonlandırma Kriteri

Extra kırmızı yazdım önemli olduğu için. Eğer rekursion'u kullanmak istiyorsanız bir sonlandırma kriteri belirtmek zorundasınız aksi halde sonsuz bir döngüye sokabilirsiniz. Mesela bir if içinde sonlandırma koşulu sağlanana kadar bir değişken içinde saydırabilirsiniz.

Fakülteden bir örnek;

Kod:
4! = 4 * 3!
3! = 3 * 2!
2! = 2 * 1
4! için;

Kod:
4! = 4 * 3 * 2 * 1

Rekursion Python

Evet bir örnek seçelim fazla uzağa gitmeden biraz önce ("bana göre 4 saat") faktöriyel konusunu ele alalım. Python kodlarınında matematik gibi elegant-kibar olduğunu göreceksiniz

Kod:
def fakt(n): 
*** if n == 1:
******* return 1 
*** else:
******* return n * fakt(n-1)
Evet buyrun ama derseniz ki ben bunun çalışma mantığını anlamadım o zaman 2 print ile hemen daha kolay anlayabilmenizi sağlayabiliriz;

Kod:
def fakt(n): 
*** print("faktoriyel cagrildi* n = " + str(n)) 
*** if n == 1: 
******* return 1
*** else: 
******* res = n * fakt(n-1) 
******* print("sonucumuz ", n, " * fakt(" ,n-1, "): ",res)********* 
******* return res
***** 	 print(fakt(5))


Python scriptimizden gelecek sonuç;

Kod:
faktoriyel cagrildi n = 5 
faktoriyel cagrildi n = 4 
faktoriyel cagrildi n = 3 
faktoriyel cagrildi n = 2 
faktoriyel cagrildi n = 1 
sonucumuz 2 * fakt( 1 ): 2 
sonucumuz 3 * fakt( 2 ): 6 
sonucumuz 4 * fakt( 3 ): 24
sonucumuz 5 * fakt( 4 ): 120 
120
iterative bir fonksiyonda yazabiliriz;

Kod:
def iterative_fakt(n): 
*** sonuc = 1 
*** for i in range(2,n+1): 
******* sonuc *= i 
*** return sonuc
Aslında bu konuya verilebilecek en iyi örneklerden biri fibonacci serisidir ama onu yazmakla uğraşamayacağım gibi ("mobilden yazdığım için") direk ihan3t'imin sizlere konusunu atayım aslında orda da tam olarak bu konuya ve dinamik programlamaya değinmeye çalıştı bende az şu kadar bilgim ile bir makale yazdım, sağlıcakla kalın.

Mobilde olduğum için kodlarda ve yazılarda yanlış olabilir, affedin Bu arada Rekursion;
İngilizce: Recursion
Türkçe: Özyineleme

Vee konuyu bulamadığım için devam yazmaya

Şimdi zamanım olmadığından wikiden fibonacciyi kopyalıcam.

/* Fibonacci dizisi, her sayının kendinden öncekiyle toplanması sonucu oluşan bir sayı dizisidir. Bu şekilde devam eden bu dizide sayılar birbirleriyle oranlandığında altın oran ortaya çıkar, yani bir sayı kendisinden önceki sayıya bölündüğünde*altın orana*gittikçe yaklaşan bir dizi elde edilir. Bu durumda genel olarak n'inci*Fibonacci*sayısı F(n) şu şekilde ifade edilir. */

Kolay bir fibonacci scripti şu sekilde yapılabilir;

Kod:
a,b=0,1
while b<100:
    print (b)
    a,b=b,a+b
Birde rekursion işlemiyle bakalım;

Kod:
def fib(n): 
    if n == 0: 
        return 0 
   elif n == 1: 
       return 1 
   else: 
       return fib(n-1) + fib(n-2)
Bide bunu iterative bir biçimde değistirelim;

Kod:
def fibi(n): 
    eski, yeni = 0, 1 
    if n == 0: 
        return 0 
    for i in range(n-1): 
        eski, yeni = yeni, eski + yeni 
        return yeni
Bu kadaaaarrr.
Hayırlı forumlar tekrardan hatalarım var ise affola.
---------------------
En çok ne zoruma gidiyor biliyor musun? "Ülkem" diye kaydetmiştin beni telefonuna. Kalbimi parçalara ayırdın, hani vatan bölünmezdi?

Yokluğun bilinç altımdayken , varlığın kimin altında merak ediyorum.
DeSTuRSuZz_, HACKERTHT, b0mb, lTURK Teşekkür etti.
nS4f3 - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
06/2017
Mesajlar:
92
Konular:
4
Teşekkür (Etti):
32
Teşekkür (Aldı):
11
Ticaret:
(0) %
26-07-2017 19:49
#2
Hocam harika anlatım olmuş.
Bildiğim halde öğrendim :
---------------------
The Grass is always The Greener
on The OTHER SİDE...
ALcatraz' Teşekkür etti.
hectovecto - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
03/2017
Nereden:
Bilmem
Mesajlar:
2.319
Konular:
269
Teşekkür (Etti):
606
Teşekkür (Aldı):
780
Ticaret:
(0) %
26-07-2017 19:51
#3
İşte hoca sen anlattın da dinlemedik mi
---------------------


ಔ Astrid Berges Frisbey ಔ


ALcatraz' Teşekkür etti.
ihan3t - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
02/2012
Mesajlar:
5.005
Konular:
255
Teşekkür (Etti):
291
Teşekkür (Aldı):
1833
Ticaret:
(0) %
26-07-2017 20:18
#4
Ellerine sağlık dostum, ithafların için ayrıca teşekkürler.

Algoritma yarışması 2 adlı konumu bende bulamadım, birisi sebepsiz yere kaldırmış. Sanırım foruma faydalı konu açma yasağı geldi haberim yok.


Onun için fibonnacci serisinde dynamic programming tekniği olan memoization kodunu da ben yazayım :

Kod:
import profile
import sys
sys.setrecursionlimit(100000)

def mfib(n):
    cache = [-1 for x in range(n+1)]
    cache[0] = 0
    cache[1] = 1

    return fib(n, cache)

def fib(n, cache):
    if cache[n] != -1:
        return cache[n]
    else:
        cache[n] = fib(n - 1, cache) + fib(n - 2, cache)
        return cache[n]

profile.run('print mfib(20)')
Burada maksat bir kere çalıştırılan adımın hafızaya alınıp tekrar o adıma başka bir node dan gelindiğinde hali hazırda hesaplanmış sonucun dönülmesi, böylece adım sayısını decrease etmek.
---------------------
Computer Engineer.

Senior Software Engineer.
ALcatraz' Teşekkür etti.
ALcatraz' - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
05/2013
Nereden:
İstanbul
Mesajlar:
4.266
Konular:
1022
Teşekkür (Etti):
968
Teşekkür (Aldı):
1757
Ticaret:
(0) %
26-07-2017 20:29
#5
Tesekkurler elimizden geldiği kadar anlatmaya devam.
Alıntı:
ihan3t´isimli üyeden Alıntı Mesajı göster
Ellerine sağlık dostum, ithafların için ayrıca teşekkürler.

Algoritma yarışması 2 adlı konumu bende bulamadım, birisi sebepsiz yere kaldırmış. Sanırım foruma faydalı konu açma yasağı geldi haberim yok.


Onun için fibonnacci serisinde dynamic programming tekniği olan memoization kodunu da ben yazayım :

Kod:
import profile
import sys
sys.setrecursionlimit(100000)

def mfib(n):
    cache = [-1 for x in range(n+1)]
    cache[0] = 0
    cache[1] = 1

    return fib(n, cache)

def fib(n, cache):
    if cache[n] != -1:
        return cache[n]
    else:
        cache[n] = fib(n - 1, cache) + fib(n - 2, cache)
        return cache[n]

profile.run('print mfib(20)')
Burada maksat bir kere çalıştırılan adımın hafızaya alınıp tekrar o adıma başka bir node dan gelindiğinde hali hazırda hesaplanmış sonucun dönülmesi, böylece adım sayısını decrease etmek.
Seninde ellerine sağlik tekrardan yordun ellerini benim için dostum Konunu yarım saat aramama değmedi demek ki, kendileri anlayamadığı için kaldırıyodurlar
---------------------
En çok ne zoruma gidiyor biliyor musun? "Ülkem" diye kaydetmiştin beni telefonuna. Kalbimi parçalara ayırdın, hani vatan bölünmezdi?

Yokluğun bilinç altımdayken , varlığın kimin altında merak ediyorum.
b0mb - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
03/2017
Nereden:
İzmir
Yaş:
17
Mesajlar:
471
Konular:
64
Teşekkür (Etti):
143
Teşekkür (Aldı):
221
Ticaret:
(0) %
26-07-2017 20:46
#6
Ellerine sağlık abi, güzel bir yazı olmuş
Konu b0mb tarafından (26-07-2017 20:49 Saat 20:49 ) değiştirilmiştir.
ALcatraz' Teşekkür etti.
ALcatraz' - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
05/2013
Nereden:
İstanbul
Mesajlar:
4.266
Konular:
1022
Teşekkür (Etti):
968
Teşekkür (Aldı):
1757
Ticaret:
(0) %
26-07-2017 21:43
#7
Alıntı:
b0mb´isimli üyeden Alıntı Mesajı göster
Ellerine sağlık abi, güzel bir yazı olmuş
O senin güzelliğin kardeşim
---------------------
En çok ne zoruma gidiyor biliyor musun? "Ülkem" diye kaydetmiştin beni telefonuna. Kalbimi parçalara ayırdın, hani vatan bölünmezdi?

Yokluğun bilinç altımdayken , varlığın kimin altında merak ediyorum.
kenzai - ait Kullanıcı Resmi (Avatar)
Co-Admin Yrd.
Üyelik tarihi:
12/2013
Mesajlar:
8.456
Konular:
1447
Teşekkür (Etti):
3792
Teşekkür (Aldı):
2445
Ticaret:
(0) %
27-07-2017 02:24
#8
eline sağlık
ALcatraz' Teşekkür etti.
Phoique 7 - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
03/2017
Mesajlar:
462
Konular:
23
Teşekkür (Etti):
37
Teşekkür (Aldı):
139
Ticaret:
(0) %
27-07-2017 02:33
#9
Elinize sağlık, geçen gün bu konuyu araştırıyordum. Buda üstüne denk gelince çok iyi oldu sağolun.
---------------------
JavaScript Developer
ALcatraz' Teşekkür etti.
ALcatraz' - ait Kullanıcı Resmi (Avatar)
Üye
Üyelik tarihi:
05/2013
Nereden:
İstanbul
Mesajlar:
4.266
Konular:
1022
Teşekkür (Etti):
968
Teşekkür (Aldı):
1757
Ticaret:
(0) %
27-07-2017 10:36
#10
Alıntı:
Phoique 7´isimli üyeden Alıntı Mesajı göster
Elinize sağlık, geçen gün bu konuyu araştırıyordum. Buda üstüne denk gelince çok iyi oldu sağolun.
Önemli değil
---------------------
En çok ne zoruma gidiyor biliyor musun? "Ülkem" diye kaydetmiştin beni telefonuna. Kalbimi parçalara ayırdın, hani vatan bölünmezdi?

Yokluğun bilinç altımdayken , varlığın kimin altında merak ediyorum.

Bookmarks


« Önceki Konu | Sonraki Konu »
Seçenekler

Yetkileriniz
Sizin Yeni Konu Acma Yetkiniz var yok
You may not post replies
Sizin eklenti yükleme yetkiniz yok
You may not edit your posts

BB code is Açık
Smileler Açık
[IMG] Kodları Açık
HTML-Kodları Kapalı
Trackbacks are Kapalı
Pingbacks are Kapalı
Refbacks are Kapalı