suma liczb fibonacciego

Odpowiedz Nowy wątek
2011-07-21 20:44
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?

Pozostało 580 znaków

2011-07-21 20:54
0

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


Pół giga extra na dropboxie? Pół giga extra na dropboxie! Tyle wygrać! >>Klik here<<

Pozostało 580 znaków

2011-07-21 21:02
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

edytowany 1x, ostatnio: Markness, 2011-07-21 21:15

Pozostało 580 znaków

2011-07-21 21:18
0

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


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.
skoro jest mowa o liczbach do 4000000, to wystarczą 32. - Azarien 2011-07-22 08:05
jest mowa o sumie liczb do 4000000, ale i tak wynik się mieści - Wibowit 2011-07-22 10:16

Pozostało 580 znaków

2011-07-21 21:33
0

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

Pozostało 580 znaków

2011-07-21 21:40
0

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


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."

Pozostało 580 znaków

2011-07-21 22:23
0

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

Pozostało 580 znaków

2011-07-21 22:31
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.)


"HUMAN BEINGS MAKE LIFE SO INTERESTING. DO YOU KNOW, THAT IN A UNIVERSE SO FULL OF WONDERS, THEY HAVE MANAGED TO INVENT BOREDOM."
edytowany 1x, ostatnio: somekind, 2011-07-21 22:31
ok dzięki za rady. - Markness 2011-07-21 22:34

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

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