Termine per l'iterazione corrente di una chiamata di funzione ricorsiva

3

Esiste un termine standard o ampiamente accettato per riferirsi a una variabile all'interno della chiamata corrente di una funzione ricorsiva in cui l'ultimo valore della stessa variabile viene passato come argomento? Sto cercando di commentare una complessa funzione ricorsiva e mi sento come se ci fosse una barriera di comunicazione tra quanto bene lo sto spiegando e la terminologia che uso.

Ecco alcuni esempi di codice:

Foo(0);

void Foo(int oldValue)
{
    // I need to know how to refer to "currentValue" / "oldValue" when commenting
    int currentValue = oldValue + 1;

    if (currentValue == 10)
        return;
    else
        Foo(currentValue);
}

Prevedo che alcune persone si limitino a riferirsi alle variabili con il loro nome, ma voglio essere in grado di riferirle con un nome generico (ad esempio: il valore) e distinguere il 2 dal contesto (ad es. valore corrente di iterazione ricorsiva / ultimo valore di iterazione ricorsiva)

Forse lo sto pensando troppo, vorrei solo sapere se esiste un termine simile per documentare meglio la mia squadra

    
posta Tyler Benzing 06.04.2016 - 20:54
fonte

1 risposta

4

Suggerisco di passare il valore corrente come parametro della funzione. Dovrebbe operare su quel valore e magari ricorrere, calcolando nuovi valori per passare alle chiamate ricorsive.

Una funzione è più semplice da spiegare e più riutilizzabile se si assume la responsabilità delle proprie operazioni e passa da lì, piuttosto che assumersi come chiamata in modo ricorsivo da un punto particolare e calcolare il valore dell'argomento dal valore di tale frame.

Adeguamento del tuo esempio:

void Foo(int value)
{
    if (value == 10)
        return;
    Foo(value + 1);
}

La terminologia e le spiegazioni trarranno vantaggio da questo, inoltre dal dare un nome più significativo al parametro della funzione di value o currentValue e dal calcolo degli argomenti ricorsivi con più significato nel dominio del problema che "il valore per prossima iterazione. "

es. una funzione di riempimento dell'inondazione ricolora il pixel corrente e si richiama in modo ricorsivo sui quattro pixel adiacenti:

void FloodFill(Image image, int x, int y, Color targetColor, Color replacementColor) {
  if (image.get(x, y) == replacementColor) {
    return;
  }
  if (image.get(x, y) != targetColor) {
    return;
  }

  image.set(x, y, replacementColor);

  FloodFill(image, x, y - 1, targetColor, replacementColor); // 1 step south
  FloodFill(image, x, y + 1, targetColor, replacementColor); // north
  FloodFill(image, x - 1, y, targetColor, replacementColor); // east
  FloodFill(image, x + 1, y, targetColor, replacementColor); // west
}
    
risposta data 07.04.2016 - 01:01
fonte

Leggi altre domande sui tag