Java - Talserie (hjälp sökes)

Permalänk
Medlem

Java - Talserie (hjälp sökes)

Har en uppgift här i Java som jag verkligen inte kan knäcka.. Jag förstår uppgiften, men hur ska jag få detta till kod (har för övrigt aldrig gjort talserie innan).

Uppgiften lyder:

Citat:

Skriv ett program som skriver ut talserien som startar med följande skvens 1,2,4. Nästa tal blirs umman av de tre tidigare, 7. Nästa (7+4+2), 13. Nästa (13+7+4), 24. Osv. Skriv ut de 20 första talen.

Jag har förstått uppgiften som sagt, men jag kan inte förstå hur jag ska få detta till kod.

Visa signatur

ᕦ(ツ)ᕤ

Permalänk
Medlem

Den där talserien bygger på samma princip som fibonacci-nummer. Kolla upp algoritmer för att generera fibonacci-sekvenser, och modda för att få det att passa ditt fall (fibonaccinummer är summan av de TVÅ föregående talen). Ett tips är att göra din algoritm rekursiv. Lycka till!

Permalänk
Medlem

om du gör det med en siffer array så borde det bli grymt lätt om du skriver de tre första siffrorna hårdkodat.

*edit* eller en array med tre tal där du byter ut dem en efter en rekursivt så att alltid det äldsta talet byts ut. sen skriver du talet du byter till i en string i varje loop och saken är biff.

Visa signatur

Be wiser than other people if you can; but do not tell them so.

►Jag förbehåller mig rätten att ha helt upp åt väggarna fel◄

Permalänk
Medlem

Lättast är nog att tänka iterativt:

//Init int iter = 20; //Hur många iterationer long[] startArr = new long[iter]; startArr[0] = 1; startArr[1] = 2; startArr[2] = 4; //Bygg nummer for(int i = 3; i<iter; i++){ startArr[i]= startArr[i-3]+startArr[i-2]+startArr[i-1]; } //Skriv ut for(long nr : startArr){ System.out.println(nr); }

Visa signatur

r

Permalänk
Medlem

Just denna uppgift kräver inte att du lagrar talen i en array. Du kan således skriva funktionen lite mer statiskt som(python):

t0 = 1 t1 = 2 t2 = 4 for i in range(20): tnew = t0+t1+t2 print tnew t0 = t1 t1 = t2 t2 = tnew

liknande lösning som Radict men i python

t = [1,2,4] for i in range(20): t.append( sum(t[-3:]) ) print t

Visa signatur

weeeee

Permalänk
Medlem
Skrivet av mounte:

Just denna uppgift kräver inte att du lagrar talen i en array. Du kan således skriva funktionen lite mer statiskt som(python):

t0 = 1 t1 = 2 t2 = 4 for i in range(20): tnew = t0+t1+t2 print tnew t0 = t1 t1 = t2 t2 = tnew

liknande lösning som Radict men i python

t = [1,2,4] for i in range(20): t.append( sum(t[-3:]) ) print t

jo men jag tycker det ser snyggare ut med en liten array än med en hög variabler.

Visa signatur

Be wiser than other people if you can; but do not tell them so.

►Jag förbehåller mig rätten att ha helt upp åt väggarna fel◄

Permalänk
Medlem

Visst är det snyggare med en array jämfört med en hög variabler.
Kan dock vara värt att motivera olika val att koda.
Med en array så har vi dels ett minne och kan använda hela talserien i senare skede i programmet. Vidare så är det mycket enklare att generalisera till även andra slags talserier. Nackdelar är att mer minne krävs. Vidare så _kan_ man råka ut för lokalitets-trubbel i cache-minnet dock inte speciellt troligt med vettig optimering och prefetch från kompilator och processor.
Att använda statiska variabler _bör_ resultera i snabbare kod då de frekvent använda variablerna lätt ryms i cacheminnet. Vidare så kan det vara enklare att läsa och förstå den koden då den blir syntax-mässigt mer lik instruktionen.

Visa signatur

weeeee