Sto cercando di capire il backtracking ricorsivo, ho una buona comprensione della ricorsione e fino a un certo punto il concetto di backtracking, ma ho difficoltà a capire l'ordine cronologico di come funzionano le cose quando for loop viene usato nel seguente codice .
public static void diceRolls(int dice) {
List<Integer> chosen = new ArrayList<Integer>();
diceRolls(dice, chosen);
}
// private recursive helper to implement diceRolls logic
private static void diceRolls(int dice,List<Integer> chosen) {
if (dice == 0) {
System.out.println(chosen); // base case
} else {
for (int i = 1; i <= 6; i++) {
chosen.add(i); // choose
diceRolls(dice - 1, chosen); // explore
chosen.remove(chosen.size() - 1); // un-choose
}
}
}
Ora sto avendo problemi a capire che per esempio passiamo 3 nella funzione diceRolls, chiama il metodo helper, all'interno del ciclo for aggiungiamo tutto il valore di i (cioè 1) dopo che chiama di nuovo il metodo così fa il per ciclo completo se stesso prima di ricorrere o il metodo dice che i dadi (2, scelti) vengono passati ora? Perché se viene passato 2 allora anche il ciclo verrebbe eseguito una sola volta prima di ricorrere da solo.