Tag Archives: fibonacci

Programlamada Fibonacci Serisi Ve Sayılarını Bulma

Programlamada fibonacci serisi ve belirli sıradaki fibonacci sayısı nasıl hesaplanır? Binet formülü kullanılarak belirli fibonacci sayısı nasıl hesaplanır?

► Fibonacci dizisi nedir? https://tr.wikipedia.org/wiki/Fibonacci_dizisi

Fibonacci dizisi, her sayının kendinden önceki ile 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.

        /// <summary>
        /// N adet fibonacci sayısını bir dizi olarak döner.
        /// </summary>
        static int[] Fibonacci(int n)
        {
            var fibSequence = new int[n];
            var prev = 0;
            var curr = 1;

            for(var i = 1; i < n; i++)
            {
                fibSequence[i] = curr;
                curr = curr + prev;
                prev = curr - prev;  
            }

            return fibSequence;
        }

        /// <summary>
        /// N index'li fibonacci sayısını dinamik programlama kullanarak döner.
        /// </summary>
        static int FibonacciNth(int n)
        {
            if (n == 0) return 0;
            if (n == 1) return 1;

            var curr = 1;
            var prev = 0;

            var counter = n - 1;

            while(counter > 0)
            {
                curr = curr + prev;
                prev = curr - prev;
                counter--;
            }

            return curr;
        }

        /// <summary>
        /// N index'li fibonacci sayısını Binet formülünü kullanarak döner.
        /// https://en.wikipedia.org/wiki/Fibonacci_number#Closed-form_expression
        /// 1 ile 75 arasındaki n sayıları için geçerlidir.
        /// </summary>
        static int FibonacciNthClosedForm(int n)
        {
            var rootOfFive = Math.Sqrt(5);
            var phi = (1 + rootOfFive) / 2; // (≈ 1.61803)

            return (int)Math.Floor(Math.Pow(phi, n) / rootOfFive + 0.5);
        }