[Algorytmy][C#] Ciąg Fibonacciego

marcixe12
Użytkownik
Użytkownik
Posty: 111
Rejestracja: 17 lis 2012, o 08:21
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 7 razy

[Algorytmy][C#] Ciąg Fibonacciego

Post autor: marcixe12 »

witam mam za zadanie napisac program który liczy Ciąg Fibonacciego metoda iteracyjną i ulepszyć do żeby złożoność była mniejsza wyczytałem ze stosuje sie to za pomocą zastosowania binarnego potęgowania macierzy lecz mam problem z wyświetleniem

Kod: Zaznacz cały

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];
        }
 
 
 
    }
 
}
Ostatnio zmieniony 9 maja 2013, o 15:30 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania.
Awatar użytkownika
radwaw
Użytkownik
Użytkownik
Posty: 72
Rejestracja: 6 mar 2013, o 19:13
Płeć: Mężczyzna
Lokalizacja: Warszawa
Pomógł: 7 razy

[Algorytmy][C#] Ciąg Fibonacciego

Post autor: radwaw »

Po pierwsze w tym potęgowaniu jest pewien trick:

Nie robisz go \(\displaystyle{ 2^8 = 2 \cdot 2 \cdot 2 \cdot 2 \cdot 2 \cdot 2 \cdot 2 \cdot 2}\)

tylko \(\displaystyle{ 2^8 = ((2 \cdot 2) \cdot (2 \cdot 2)) \cdot ((2 \cdot 2) \cdot (2 \cdot 2))}\)

jak widzisz wystarczy umiejętnie kwadratować....

Wiesz jak zrobić dla wykładników nie potęg dwójki?

Nie wiem w czym problem z wyświetlaniem...

Console.WriteLine(); jeśli chcesz wypisać w konsoli...

Poza tym po co C# skoro można C, ew. C++?
dexter90
Użytkownik
Użytkownik
Posty: 391
Rejestracja: 11 lis 2011, o 09:48
Płeć: Mężczyzna
Pomógł: 32 razy

[Algorytmy][C#] Ciąg Fibonacciego

Post autor: dexter90 »

radwaw, kpiny sobie robisz? Dlaczego w C i C++ jak można w C#? Skoro nie umiesz jednego języka to nie dyskryminuj innych tylko sie doucz.

Pozdro.
ODPOWIEDZ