Złożoność ciągu Fibonacciego

0

metodę obliczającą wyrazy ciągu Fibonacciego, jak można zmodyfikuj metodę celem zmniejszenia
złożoności obliczeniowej.?

public static uint Fibonacci(uint n)
        {
            if (n <= 2)
            {
                return 1;
            }
            else
            {
                uint a = 1;
                uint b = 1;
                uint c = 0;
                for (int i = 0; i < n-2; i++)
                {
                    c = a + b;
                    a = b;
                    b = c;
                }
                return c;
            }
0

Wystarczy wpisać w google ciąg fibonacciego i wejść w wikipedię. Skorzystaj z funkcji tworzących, albo z gotowca - jest podany na wikipedii.

[Edit]: Możesz to jeszcze zrobić za pomocą potęgowania macierzy - unikniesz wtedy zabawy z pierwiastkami i będziesz miał złożoność logarytmiczną. Tak, to też jest na wiki.

2

Ciekawe, czy wykładowcy też są na tym forum i z uśmiechem czytają wpisy

0

wpisałem i znalazłem ale bardzo go nie rozumiem i nie wiem jak go wyświetlić mam coś takiego pierwsza działa jak wyświetlić druga metodę ?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {


            String line;
            int n;

            Console.WriteLine("Podaj, ktory wyraz ciagu Fibonacciego obliczyc");
            line = Console.ReadLine();
            n = int.Parse(line);

            Console.WriteLine(n + "-ty wyraz ciagu Fibonacciego: " + Fibonacci(n));
            Console.ReadLine();
        }

        public static int Fibonacci(int n)
        {
            if (n <= 2)
            {
                return 1;
            }
            else
            {
                int a = 1;
                int b = 1;
                int c = 0;
                for (int i = 0; i < n - 2; i++)
                {
                    c = a + b;
                    a = b;
                    b = c;
                }
                return c;
            }
        }

        public static int Fibonacci1(int n)
        {
            if (n == 0)
                return 0;
            if (n == 1 || n == 2)
                return 1;

            int[,] A = new int[2, 2] { { 0, 1 }, { 1, 1 } };
            int[,] B = (int[,])A.Clone();
            int[,] C = new int[2, 2];

            n -= 2;

            for (int i = 1; i <= n; i++)
            {
                C[0, 0] = B[0, 0] * A[0, 0] + B[0, 1] * A[1, 0];
                C[0, 1] = B[0, 0] * A[0, 1] + B[0, 1] * A[1, 1];
                C[1, 0] = B[1, 0] * A[0, 0] + B[1, 1] * A[1, 0];
                C[1, 1] = B[1, 0] * A[0, 1] + B[1, 1] * A[1, 1];

                B = (int[,])C.Clone();
            }
            return C[1, 1];
        }



    }

}
0
public static int Fibonacci1(int n)

Przeczytaj to na głos i zastanów się.
Btw - nie miałeś bezrozumnie kopiować kodu, tylko samemu zrozumieć zasadę działania i takowy napisać.

0

czy to będzie cos takiego ?

 wynik1 = Fibonacci1(n);
            Console.WriteLine("wynik" + wynik1);
0

A zresztą,....
metoda zwraca ci tablicę 2 wymiarową 2 elementową ( w C# zaczynami liczyć od 0 nie od 1 ). Każdy element tablicy musisz wyświetlić pojedynczo. To jest naprawdę podstawowa wiedza z C#, bez tego nie idź dalej bo nic a nic nie zrozumiesz z języka a jedynie nauczysz się <wytnij_wklej> i w ciągu miesiąca nabijesz 2k postów na forach prosząc o pomoc. Zapytaj google o tablice....

Najprostszy sposób wywalenia tablicy na konsolę, to pobranie bez pętli każdego z elementów tablicy :

Console.WriteLine("wynik" + wynik[0,0]);
Console.WriteLine("wynik" + wynik[0,1]);
Console.WriteLine("wynik" + wynik[1,0]);
Console.WriteLine("wynik" + wynik[1,1]);

ale pisząc tak, módl się żeby tablica nie miała 100 elementów !

1 użytkowników online, w tym zalogowanych: 0, gości: 1