suma liczb fibonacciego

suma liczb fibonacciego
Markness
  • Rejestracja: dni
  • Ostatnio: dni
0

mam takie zadanie do rozwiązania:

Kopiuj
 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ł:

Kopiuj
         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?

unikalna_nazwa
  • Rejestracja: dni
  • Ostatnio: dni
0

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

Markness
  • Rejestracja: dni
  • Ostatnio: dni
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

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

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

Markness
  • Rejestracja: dni
  • Ostatnio: dni
0

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

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
0

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

Markness
  • Rejestracja: dni
  • Ostatnio: dni
0

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

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
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.)

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.