Carsten: Stack overflow Fehler? Hat mein Browser Kopfschmerzen oder wie?

Beitrag lesen

Hi code21,

Was meint Rekursion bei JS genau....

Eine Funktion ruft sich selber auf.
Beispiel Fakultät:

fak(6) = 1*2*3*4*5*6

"iterative" Lösung
function fac(x)
{
  var ergebnis=1;
  for(i=1;i<x;i++)
    ergebnis=ergebnis*i;
  return ergebnis;
}
alert(fac(6)); // 720

"rekursive" Lösung
function fac(x)
{
  if(x<=1)
    return 1;
  else
    return x*fac(x-1);
}
alert(fac(6)); // auch 720

Die rekusive Fakultät ist 'programmiertechnisch' eigentlich nicht sinnvoll,
es ist nur das einfachste Beispiel für Rekursion.
Der Funktionsparameter (x) ist eine lokale Variable, jeder Aufruf von fac()
hat seine private Version davon.
Probier mal fac(100) 1000 10000 -> irgendwann wird der Stack overflow kommen.

Für Fortgeschrittene gibts dann noch die Türme von Hanoi (->Suchmaschine).

(vieleicht kann ich das Script umschreiben um solch Fehler zu umgehen)???

Rekursion per se ist kein Fehler-----------------------^^^^^^

ansonsten, ja kann man, und zwar 'rein formal' (um mal vorsichtig anzudeuten,
das ich nicht weiss was das Script machen soll, ich kann kein IE-DHTML)

<script language="JavaScript">
var x=0;
var i=0;
function finde()
{
  while(1) // Erstmal Endlosschleife
  {
    if(document.all.tags("a")[x].contains(document.all.tags("img")[i]))
    {
      alert(document.all.tags("a")[x].outerHTML);
      x=x+1;
      i=0;
      alert("Prüfe <a> "+x+" auf <img> "+i);
      // finde();
    }
    else
    {
      if(i+1 < document.all.tags("img").length)
      {
        i=i+1;
        alert("Prüfe <a> "+x+" auf <img> "+i );    
        // finde();
      }
      else
      {
        if(x+1 < document.all.tags("a").length)
        {
          x=x+1;
          i=0;
          alert("Nö! kein <img> drin.Prüfe nächstes <a>");  
          // finde();
        }
        else
        {
          alert("Fertig");
          x=0;
          i=0;

break;  // bricht die while(1) Schleife ab
        }
      }
    }
  }
}

Jetzt ruft die Funktion finde() sich nicht mehr selbst auf. Das spart
Resourcen.

Gruss,
Carsten