suma liczb fibonacciego

0

mam takie zadanie do rozwiązania:

 Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.

Kod który napisałem aby to rozwiązał:

         static void Main(string[] args)
        {
            uint i = 1;
            uint suma = 0;
            while (Fibonacci(i) <= 4000000)
            {
                suma += Fibonacci(i);
                i++;
            }
            Console.WriteLine(suma);
            Console.Read();
        }

        public static uint Fibonacci(uint n)
        {
            if (n <= 2)
            {
                return 1;
            }
            else
            {
                return Fibonacci(n - 2) + Fibonacci(n - 1);
            }
        }
    }

niestety odpowiedź którą dostaje (9227464) jest błędna. Coś w kodzie nie tak czy po prostu nie zrozumiałem zadania?

0

nie zrozumiałeś zadania
przetłumacz sobie lepiej trzy ostatnie słowa

0

no niestety nie moge jednak tego poprawnie zrozumieć, a google chyba nie tłumaczy aż tak idealnie..

EDIT: ok poradziłem sobie, mój angielski wymaga jeszcze sporo nauki

0

Masz sumować tylko parzyste liczby. Chyba trzeba użyć typu 64-bitowego.

0

wystarczył aktualnie używany typ. Dorzuciłem tylko warunek sprawdzania parzystości,

0

Niby to w tej sytuacji nie ma znaczenia, ale prawdopodobnie gorzej pod względem wydajności się tego nie dało napisać.

0

tak z ciekawości, jak ten kod można jak najbardziej zoptymalizować?

0

Po pierwsze, w jednym przebiegu pętli liczysz to samo dwa razy. Użyj zmiennej pomocniczej, i wywołaj Fibonacci(i) tylko raz.
Po drugie, zamiast rekurencyjnej wersji algorytmu użyj iteracyjnej, która jest znacznie szybsza, bo nie liczy tych samych wartości wielokrotnie. (Albo jeszcze szybszej niż iteracyjna wersji.)

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