Fibonacci serisi ile en büyük sorun, basit özyinelemeye kullandığınızda, her şeyi yeniden hesaplama ve çift bir sürü iş yapacağız, algoritmanın zaman karmaşıklığı olduğunu. Eğer fib hesaplamak (n) fib (n-2) ve fib (n-3) hesaplar fib (n-1), hesaplama olacak
int fib(int n) {
if (n < 2) { return 1; }
return fib(n-1) + fib(n-2)
}
kullanılarak olmasıdır. Fakat fib (n) 'yi hesaplamak için, zaten fib'i (n-2) hesaplayacaksınız. Bunu iyileştirmek için geçici sonuçları saklamanız gerekir. Bu, yinelemeyi kullanarak ve i = 0'dan n'ye geçerek genellikle daha kolaydır. Bu sayede son iki sonucu kolayca saklayabilir ve aynı değerleri tekrar tekrar hesaplamaktan kaçabilirsiniz.
bir algoritma verimli olup olmadığını görmek için kolay bir yol denemek ve birkaç giderek daha zor örnekler için bunu çözmek etmektir. Ayrıca daha doğru bir şekilde hesaplayabilirsiniz. Yukarıdaki fibonacci örneğini alın. Fib (n) çağrısı, karmaşıklığı O(fib(n)) = O(fib(n-1)) +O(fib(n-2)) + 1
alır (ek için sadece 1 tane alalım).Şimdi O(fib(0)) = O(fib(1)) = 1
olduğunu varsayalım. Bu O(fib(2)) = 3, O(fib((3)) = 5, O(fib(4)) = 9
anlamına gelir. Gördüğünüz gibi, bu seri fibonacci serisinden daha hızlı olacaktı! Bu, büyük miktarda artan karmaşıklık anlamına gelir. 0 ile n arası bir döngü ile yinelemeli bir algoritma elde edeceğiniz zaman, karmaşıklığınız n'nin sırasına göre ölçeklenir ve bu da daha iyi olur. Daha fazla bilgi için
, büyük-o gösterimini kontrol edin.
Eğer ints veya longs kullanırsanız, 60 veya 70 tekrardan fazla gitmeyeceksiniz, bu yüzden gerçekten önemli değil. Ayrıca, sonuçları yinelemeli yöntemle de önbelleğe alabilirsiniz. – assylias
Ayrıca: [? Yineleme veya loop] (http://stackoverflow.com/questions/13346424/recursion-or-looping?lq=1) Sadece bir açıklama olarak – nawfal