Rekursive Funktion mit Taste abbrechen



  • Hallöchen ihr da draußen, und zwar hab ich ein kleines Prog geschrieben, dass schön vor sich hinrechnet und auch tut was es soll. Die rekursive Funktion hat für ne schön große Berechnung nur 0.43 Sec. gebraucht. So, nun wollte ich einfügen, dass es bei der eingabe von f oder r abbricht, hat auch geklappt, nur leider ist die Berechnungsdauer auf über 39 Sekunden angestiegen. Nervt mich halt, dass wegen dieses kleinen bedingung es sooo stark ansteigt. Hier mal dr Code, ich hoffe ihr könnt mir helfen!

    Dieses kbhit() und die
    if((control->cKeyboard != 'f') && (control->cKeyboard != 'r')) wird halt durch die Rekursion tausendemal aufgerufen, was es sehr langsam macht

    if(kbhit())
    {
       control->cKeyboard = getch();
    }
    if((control->cKeyboard != 'f') && (control->cKeyboard != 'r')) 
    {
    
       for (i = 0; i < control->iSi; i++)
       {
          control->iBo[iRo] = i;
          if (rowl(control,iRo) == 0)
          {
             calc(control,iRo+1);
          }
       }
    
       if (iRo == control->iSi)
       {
          control->iSons++;
          if (control->eSave == yes)
          {
             saveson(control->iBo, control->iSi, control->iSons, control->filename);
          }
          if (control->eMode == man)
          {
             status(control, 0.0000);
             printson(control);
             control->cKeyboard = getch();
          }
          return;
       }
    }
    }
    

    Danke für eure Hilfe



  • Wenn du mit return aus der rekursiven Funktion rausspringst, landest du nicht im Hauptprogramm, sondern in der nächsthöheren Rekursionsstufe. Da könntest du eventuell den Rücksprung etwas beschleunigen, indem die Funktion einen Rückgabewert liefert und auch auswertet:

    bool calc(...)
    {
      if(abbruch) return false;//Abbruch der Berechnung
      ...
      if(!calc(...))return false;//rekursiver Aufruf
      ...
      return true;//reguläres Funktionsende
    }
    

Log in to reply