Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

Hallo,

hab mir ein Programm geschrieben, die Fibonacci-Zahlen berechnet. Das Programm läuft rekursiv.

Jetzt bin ich auf einer Suche nach einer Formel, oder einem Weg, wie ich berechnen kann, wieviele Rekursionen ich machen muss, um zu dem Ergebnis zu gelangen.

Habe bis jetzt nur eine Möglichkeit gefunden, nur um mit dieser Möglichkeit den Aufwand zu berechnen hat den selben Aufwand, als gleich die Zahl zu berechnen.

Fibonacci:

f(1) = 1

f(0) = 0;

f(x) = f(x-1) + f(x-2);

  • Autor

Hm, hab mir die Seite angeschaut, aber die bringt mich auch nicht weiter, da die Formel zur Aufwandsberechnung den gleichen Aufwand hat, wie die Zahl selber auszurechnen. Folglich wäre es absoluter Unsinn erst den Aufwand auszurechnen!

Original geschrieben von FinalFantasy

Hallo,

hab mir ein Programm geschrieben, die Fibonacci-Zahlen berechnet. Das Programm läuft rekursiv.

Jetzt bin ich auf einer Suche nach einer Formel, oder einem Weg, wie ich berechnen kann, wieviele Rekursionen ich machen muss, um zu dem Ergebnis zu gelangen.

Habe bis jetzt nur eine Möglichkeit gefunden, nur um mit dieser Möglichkeit den Aufwand zu berechnen hat den selben Aufwand, als gleich die Zahl zu berechnen.

Fibonacci:

f(1) = 1

f(0) = 0;

f(x) = f(x-1) + f(x-2);

OK, die Formel kenn ich ja, aber wie darf ich die Frage verstehen? Du willst eine Formel um zu berechnen wieviele Rekursionen Du machen musst um zum Ergebnis zu gelangen. Aber von welchem Ergebnis reden wir hier? Hast Du eine Zahl gegeben die Du auf Fibonacci prüfen willst und willst die Rekursionstiefe ermitteln (ohne die Rekursion durchführen zu müssen) oder wie ist die Frage jetzt gemeint?

  • Autor

Ich übergebe der Funktion eine Zahl x, und die Funktion soll mir die Fibonaccizahl auf dieser eben x-ten Stufe zurückgeben.

Ich möchte jetzt wissen, wie oft sich die Funktion wieder selber aufrufen muss, um an dieses Ergebniss zu gelangen.

Original geschrieben von FinalFantasy

Ich übergebe der Funktion eine Zahl x, und die Funktion soll mir die Fibonaccizahl auf dieser eben x-ten Stufe zurückgeben.

Ich möchte jetzt wissen, wie oft sich die Funktion wieder selber aufrufen muss, um an dieses Ergebniss zu gelangen.

Naja, eigentlich doch ganz einfach. Gehen wir das mal durch

1. Für f(0) und f(1) findet keine weitere Rekursion statt, da hier Festwerte vorliegen

2. Für f(2) stößt man auf die Festwerte für f(1) und f(0) also auch keine Rekursion

3. Für f(3) stößt man auf f(2)+f(1) Hier ist die 1. Rekursion

4. für f(4) berechnet man f(3)+f(2) das sind 2 rekursive Aufrufe. f(3) ruft eine weitere Rekursion auf, macht Aufwand 3

5. f(5) = f(4)+f(3) (2 Rekursionen) = f(3)+f(2)+f(2)+f(1) (3 Rekursionen und ein Festwert) = f(2)+lauter Festwerte (1 Rekursion) also insgesamt 6 Rekursionen

Macht man das logisch so weiter kommt man bei f(6) auf 10 Rekursionen, bei f(7) auf 15, etc. (nur die schreib ich jetzt nicht mehr hin. Probier es einfach aus..) Das ist eine Summenfunktion. Für x >=3 errechnet sich die Anzahl der Rekursionen als Summe der Zahlen von 1 bis x-2. Macht man die Probe so siehst Du im Fall f(3), die Summe der Zahlen von 1 bis 1 ist 1. Im Fall f(4) ist die Summe der Zahlen von 1 bis 2 die 3. Im Fall f(5) ist die Summe 1+2+3=6 usw.

Berechnen kannst Du das entweder innerhalb einer Schleife (aufwendig) oder aber durch einen einfachen Trick. Summiert man nämlich die Summe der Zahlen von 1 bis n, so kann man die Summe errechnen durch n*(n+1)/2

Im Fall f(6) also ist n=4 und damit 4*5/2 = 10

Im Fall f(7) ist n=5 und damit 5*6/2 = 30/2 = 15

Und da sag mal einer Mathe wäre nicht was schönes...

  • 2 Wochen später...

Wenn mich nicht alles irrt,

brauch man um die n-te Fibonaccizahl zu berechnen ca 1,6^n Funktionsaufrufe.

1,6 steht hier für den Goldenen Schnitt 1/(x+1)=x.

Gruß Tapeman

Warum löst das Problem eigentlich rekursiv und nicht iterativ?

  • Autor

Weil ich einen Parktikanten hatte, und ihm zeigen wollte, was rekursive Funktionen sind.

Und imo ist es das Problem für einen Anfänger Rekursiv noch leichter verständlich als iterativ, wenns auch um vieles langsamer ist.

Gut, dann habe ich nichts gesagt. :-)

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.