Ist es möglich die Fibonacci Folge in java bis z.B. 50 anzeigen zu lassen mit nur einem Übergabeparameter und nur einer funktion?

2 Antworten

Je nachdem, was du machen möchtest, kannst du evtl. als Parameter schlicht ein Tupel übergeben oder den Goldenen Schnitt zur Berechnung verwenden.

Oder du nutzt kaskadenartige Rekursion.

Ich sehe jetzt nicht, wo es da eine wirkliche Einschränkung geben sollte.

Klar

Hier mal in Pseudocode.

List numbers;
numbers.Add(1);
numbers.Add(1);
value = 0;
do
value = numbers[numbers.Count -1]+numbers[numbers.Count - 2];
numbers.Add(value);
while(value < Zielnummer);

Nach dem while ists eben nur noch Rückgabe der Liste und das anzeigen von dieser.


KleinerDulli 
Beitragsersteller
 21.02.2025, 17:34

ne ne, ohne liste oder sowas, nur ganz einfach ohne schleifen nur rekursion und ohne was zu speichern vorher

Kelec  21.02.2025, 17:35
@KleinerDulli

Die Fibonacci Folge ist ja keine einzige Zahl, also wie willst du die Folge zurückgeben wenn du keine Liste verwendest?

Die Schleife kannst du natürlich durch eine Rekursion ersetzen, aber dann hast du 2 Übergabeparameter oder einen kombinierten Typ.

KleinerDulli 
Beitragsersteller
 21.02.2025, 17:38
@Kelec

also der fronaldfruck hatte eine idee die äußerst interessant ist, man könnte irgendwie die zaheln kodieren, dass ich in dem nächsten rekursionsschritt die vorherige zahl mit drinne habe

Kelec  21.02.2025, 17:41
@KleinerDulli

Du kannst damit die Rekursion machen, aber die Rückgabe der Liste geht damit nicht.

Wenn du ein long nimmst passen da 2 int rein, also die Rekursion kannst du so machen, aber dann kannst du nur die Liste mit print ausgeben die Rückgabe über return geht dann nicht.

KleinerDulli 
Beitragsersteller
 21.02.2025, 17:42
@Kelec

hmm also ich will ja direkt in der funktion ausgeben also void, brauche da nichts zurückgeben, geht das dann, ich probiere mich gerade rum

Kelec  21.02.2025, 17:45
@KleinerDulli

Das geht.

Schreib deine Funktion mal so

int Fibonacci (int param1 , int param2)

Das int int ersetzt du dann durch long param und machst

int param1 = param&0xFFFFFFFF;

int param2 = param >> 32;

Zum recodieren dann eben wieder

param = param2 << 32 | param1;

So hast du dann 2 parameter in einem Zusammemgefasst.

Du kannst den long natürlich auch auf 8 Bytes aufspalten.