Wer versteht diese Java Aufgabe mit Fibonacci Zahlen siehe Foto?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Also, zunächst mal sollen die ersten 3 Zahlen mit "1" beginnen.
Hier hast du einen Tippfehler direkt beim Start.

Ist zwar kein Java aber so geht's.

Dim Zahlen(30) as long
Zahlen(0) = 1
Zahlen(1) = 1
Zahlen(2) = 1    

for i = 3 to 30
   Zahlen(i) = Zahlen(i-1)+Zahlen(i-2)+Zahlen(i-3) 
next i

Nichtsnutz12 
Fragesteller
 03.11.2018, 17:22

hmmmokay hast du dir mal die fibonacci zahlen angekuckt?? mit deiner Rechnung kommt man nicht aufs Ergebnis

IchMalWiederXY  03.11.2018, 17:29
@Nichtsnutz12

Ich habe die Aufgabenstellung angeschaut. Die ersten 3 Zahlen sind gegeben, je "1". die 4te berechnet sich aus der Summe der "letzten 3" t_3 = 3.
Die 5te berechnet sich wieder aus der Summer der letzten 3
t_4 = 3 + 1 + 1 = 5.   usw.  t_5 = 5+3+1 = 9 …
Ich bin von meiner VBA Lösung überzeugt.
Eventuell gibt es zu klären ob die 30te Zahl bereits mit dem index i = 29 erreciht wird, da 0 - 29 dreißig Elemente sind.. Sofern du also das Ergebnis bereits kennst dann mal an dieser Ecke spielen.   

In der Aufgabenstellung steht, dass du die 30. Tribonacci-Zahl berechnen sollst, nicht die Fibonacci-Reihenfolge. Zu Letzterer hast du schließlich bereits die Lösung.

Die Tribonacci-Reihenfolge sollte nach vier Iterationen so aussehen:

 3 1 1
 5 3 1
 9 5 3
17 9 5

Das heißt, die erste Zahl berechnet sich stets durch die Summe der vorherigen Reihe.

1 1 1 // = 3; init
3 1 1 // = 5
5 3 1 // = 9
9 5 3 // = 17

Umgewandelt in Pseudocode:

first = 1
second = 1
third = 1

from 0 < count:
  sum = first + second + third
  third = second
  second = first
  first = sum

Die Reihenfolge der Zuweisungen ist wichtig, damit die vorherigen Werte nicht überschrieben werden.

Beachte, dass du die 30. Zahl berechnen sollst. Nicht die 29..

Das kann man rekursiv viel schöner loesen. Abgesehen davon sollst du Tribonacci und nicht Fibonacci machen...

AldoradoXYZ  03.11.2018, 17:18

Hat man nicht bei einer Rekursion den Nachteil, dass der Call-Stack immer größer wird? Sollte man, wenn man auf Rekursion verzichten kann, dies auch tun?

Gruß

IT1234567  04.11.2018, 12:36
@AldoradoXYZ

Für eine performante Implementierung natürlich. Wenn es um eine elegante und kurze Implementierung gehen soll (was bei so einer Aufgabe sehr nahe liegt) dann eignet sich rekursion bestens.

Nichtsnutz12 
Fragesteller
 03.11.2018, 17:21

google mal Tribonacci, das gibts nicht, man wird direkt auf fibonacci korrigiert

IchMalWiederXY  03.11.2018, 17:32
@Nichtsnutz12

Ich glaube es geht lediglich um eine "Programmieraufgabe", die man gleich im Netz als Standard  Lösung vorfindet.  aber nun halt hier :-)

Nichtsnutz12 
Fragesteller
 03.11.2018, 20:06
@colum123

warum auf English? Gabs keinen deutschen Link?😂😂 Warum gibt uns mein Lehrer Hausaufgaben über irgendwelche Zahlenarten die so selten sind das sie fast niemand kennt

colum123  03.11.2018, 20:59
@Nichtsnutz12

Weil in der Aufgabe steht, wie man sie berechnet.

regex9  03.11.2018, 21:02
@Nichtsnutz12

Ich frage mich, wo dein Problem liegt. 😶 Dein Lehrer hätte dir nicht einmal den Namen der Folge nennen müssen, denn wie sie funktioniert, steht ja in der Aufgabenstellung. Das muss genügen.

Bei der Aufgabe geht es um eine einfache Programmierübung.