Fibonacci Zahlen Algorithmus mit Referenz

  • Themenstarter Themenstarter Cplusplus4Ever
  • Beginndatum Beginndatum
C

Cplusplus4Ever

Hi,

ihr werdet mich vielleicht auslachen, dennoch stelle ich mal die Frage ;)
Also wie der fibonacci Algorithmus funktioniert ist mir bewusst. Dies wollte ich nun steigern in dem ich die ermittelte Zahl durch eine Referenz an das Hauptprogramm übergebe.
Allerdings bekomme ich einen Stack overflow
Jemand eine Idee woran dies liegen könnte?

Code:
void fib(int &n)
{
int temp = 0;
int r= 0;
int b = 0;
int t= 0;
  if(1 == n || 2 == n)
  {

      n= 1;
  }
  else
  {

	b = n;
	r = n;
	t = b-1;
	temp = r-2;
	int k =t+temp;
   fib(k);
  }

}

int main()
{
int z = 0;
fib(z);
cout << z << endl;
	system("pause");
    return 0;
}

Vielen Dank im voraus!
 
Moin,

ich denke, weil Du nie aus Deiner Rekursion rauskommst, sondern immer weiter mit immer höheren Werten aufrufst ... :p

Beispiel - erster Aufruf mit 5 ergibt nach einander folgende Werte/Aufrufe :
Code:
       1.      2.       3.     usw.
b      5       7        11
r      5       7        11
t      4       6        10
temp   3       6        9  
k      7       11       20

     fib(7)  fib(11)  fib(20) .....

[EDIT] Du brauchst eine Abbruchbedingung, oder soll das 'n' sein !! [/EDIT]
Gruß
Klaus

[EDIT]
Hier mal einige Lösungsansätze :
http://www.google.de/search?as_q=fi...as_dt=i&as_sitesearch=&as_rights=&safe=images
[/EDIT]
 
Zuletzt bearbeitet:
hm immernoch das selbe prob
Code:
#include <iostream>
using namespace std;

void fib(int &n)
{
int temp = 0;
int r= 0;
int b = 0;
int t= 0;
  if(1 == n || 2 == n)
  {
 
      n= 1;
  }
  else
  {
	if(n>10)
	{}
	else{
    b = n;
    r = n;
    t = b-1;
    temp = r-2;
    int k =t+temp;
/*ich hatte vorher k = fib(t)+fib(temp)
das ging aber nicht daher habe ich es so gemacht*/
   fib(k);
  }
  }
 
}
 
int main()
{
int z = 0;
fib(z);
cout << z << endl;
    system("pause");
    return 0;
}
 
Hi.

Du rufst die Funktion mit einem ungültigen Argument auf.

Es kommt auf die Definition der fib Funktion an, aber deine Funktion ist für n = 0 nicht definiert.

Üblicherweise verwendet man diese rekursive Vorschrift:
Code:
fib(0) = 1
fib(1) = 1
fib(n+2) = fib(n) + fib(n+1)
Außerdem kommst du mit deinen Referenzen beim rekursiven Aufruf durcheinander. Im ersten Aufruf ist n ein Alias für z in main, beim 1. rek. Aufruf ist n aber plötzlich ein Alias für k usw.

Gruß
 
Zurück