Recursion ve Recursive Formula'yı Anlamak
tekrarlama
Yineleme, bir sürecin tekrarıdır. Okula giden bir öğrenci, mezuniyete kadar her gün okula gitme sürecini tekrarlar. Ürün almak için en az ayda bir veya iki kez markete gidiyoruz. Her ay bu işlemi tekrarlıyoruz. Matematikte, bir Fibonacci dizisi de görev uyumunun özelliklerini izler. İlk iki sayının 0 ve 1 olduğu Fibonacci dizisini düşünelim, diğer tüm sayılar önceki iki sayının toplamıdır.
0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89
Yineleme adımları
Fibonacci formülü şöyle yazılabilir:
F (n) = F (n - 1) + F (n - 2)
fibonacci (0) = 0
fibonacci (1) = 1
fibonacci (2) = fibonacci (1) + fibonacci (0) = 1 + 0 = 1
fibonacci (3) = fibonacci (2) + fibonacci (1) = 1 + 1 = 2
fibonacci (4) = fibonacci (3) + fibonacci (2) = 2 + 1 = 3
fibonacci (5) = fibonacci (4) + fibonacci (3) = 3 + 2 = 5
fibonacci (6) = fibonacci (5) + fibonacci (4) = 5 + 3 = 8
Aşağıda verilen algoritma, nth Fibonacci sayısını döndürür.
özyineleme
Her seferinde yeni bir Fibonacci numarası (nth sayı) elde edersek, nt rakamı (n - 1) bu sayıyı (n + 1) Fibonacci'yi bir sonraki nth Fibonacci olarak buluruz. Yukarıda belirtilen yineleme adımlarını gördüğümüz gibi: eğer n = 2 ise
fibonacci (2) = fibonacci (2 - 1) + fibonacci (2 - 2) = fibonacci (1) + fibonacci (0) = 1 + 0 = 1
Şimdi, fibonacci (3) üretmek istiyoruz, yani n = 3.
fibonacci (3) = fibonacci (3 - 1) + fibonacci (3 - 2) = fibonacci (2) + fibonacci (1) = 1 + 1 = 2
Yani, her zaman n, akım (n - 1) th ve (n - 2) fibonacci değerini artırır. Fakat her n için (n - 1) th ve (n - 2) fibonacci'yi takip etmek yorucudur. Kendiliğinden yineleme görevini tekrarlamak için kendisini çağıran bir yöntem yazmak nasıl olur?
Kendisini çağıran bir yöntem, özyinelemeli yöntem olarak adlandırılır. Yinelemeli bir yöntemin, programın kendisini aramayı bıraktığı bir temel durumu olması gerekir. Fibonacci serileri için temel durumumuz fibonacci (0) = 0 ve fibonacci (1) = 1'dir. Aksi takdirde Fibonacci yöntemi kendisini iki kez - fibonacci (n - 1) ve fibonacci (n - 2) olarak adlandırır. Sonra onları fibonacci (n) almak için ekler. Fibonacci'yi bulmak için özyinelemeli bir yöntem şöyle yazılabilir:
PRO TIP: Sorun bilgisayarınız veya dizüstü bilgisayar / dizüstü bilgisayar ile yapılmışsa, depoları tarayabilen ve bozuk ve eksik dosyaları değiştirebilen Reimage Plus Yazılımı'nı kullanmayı denemeniz gerekir. Bu, çoğu durumda, sorunun sistem bozulmasından kaynaklandığı yerlerde çalışır. Reimage Plus'ı tıklayarak buraya tıklayarak indirebilirsiniz.Dikkatli bir şekilde bakarsak, özyineleme yığını özelliğini takip eder. Bir problemin çözümü için daha küçük alt problemleri çözer. N> 1 için son satırı yürütün. Yani, eğer n = 6 ise, fonksiyon fibonacci (6 - 1) ve fibonacci (6 - 2) çağırır ve ekler. fibonacci (6 - 1) veya fibonacci (5) fibonacci (5 - 1) ve fibonacci (5 - 2) 'yi çağırır ve ekler. Bu yineleme 6'ya kadar devam eder. Fibonacci (0) = 0 veya fibonacci (1) = 1 olan temel durum değerine ulaşır. Temel duruma vurduğunda iki temel değer ekler ve fibonacci değerini alana kadar yükselir. 6). Aşağıda özyinelemenin bir ağaç temsilidir.
Görebildiğimiz gibi, özyineleme ne kadar güçlü olabilir. Sadece tek bir kod satırı yukarıdaki ağacı yapıyor (yukarıdaki taban kodları da dahil olmak üzere yukarıdaki son satır). Özyineleme bir yığını korur ve temel duruma ulaşana kadar daha derine gider. Dinamik Programlama (DP): Özyineleme ve kodu anlamak kolaydır, ancak zaman ve bellek açısından pahalı olabilir. Aşağıdaki yineleme ağacına bir göz atın. Fib (4) ile başlayan sol alt ağaç ve fiberin (4) ile başlayan sağ alt ağaç aynıdır. Aynı sonucu 3 üretiyorlar ama aynı görevi iki kez yapıyorlar. Eğer n büyük bir sayı ise (örnek: 500000), özyineleme, aynı alt görevi birden çok kez çağırdığı için bir programı çok yavaşlatabilir.
Bu problemden kaçınmak için dinamik programlama kullanılabilir. Dinamik programlamada, aynı türden gelecekteki görevi çözmek için daha önce çözülen alttakımı kullanabiliriz. Bu, orijinal problemi çözmek için görevi azaltmanın bir yoludur. Daha önce çözülmüş alttask çözümlerini sakladığımız bir dizi fib [] elde edelim. Zaten biliyoruz ki fib [0] = 0 ve fib [1] = 1. Bu iki değeri saklayalım. Şimdi, fib'in değeri nedir? Fib = [0] = 0 ve fib [1] = 1 zaten saklanmış olduğundan, sadece fib [2] = fib [1] + fib [0] demeliyiz ve hepsi bu kadar. Aynı şekilde fib [3], fib [4], fib [5], fib [n] üretebiliriz. Önceden çözülmüş alt görevler, asıl görev çözülemeyene kadar bir sonraki alt görevi almak için çağrılmaktadır, bu nedenle gereksiz hesaplamayı azaltır.
PRO TIP: Sorun bilgisayarınız veya dizüstü bilgisayar / dizüstü bilgisayar ile yapılmışsa, depoları tarayabilen ve bozuk ve eksik dosyaları değiştirebilen Reimage Plus Yazılımı'nı kullanmayı denemeniz gerekir. Bu, çoğu durumda, sorunun sistem bozulmasından kaynaklandığı yerlerde çalışır. Reimage Plus'ı tıklayarak buraya tıklayarak indirebilirsiniz.