Ho grossi problemi nel fare la ricorsione, specialmente cercando di visualizzarla. Un ottimo esempio è il problema del vino di invecchiamento descritto nella risposta principale di questo link: link . Nell'esempio, hai il compito di trovare la sequenza ottimale di vino da vendere dato i prezzi iniziali del vino e il fatto che i prezzi raddoppiano ogni anno.
int p[N]; // read-only array of wine prices
// year represents the current year (starts with 1)
// [be, en] represents the interval of the unsold wines on the shelf
int profit(int year, int be, int en) {
// there are no more wines on the shelf
if (be > en)
return 0;
// try to sell the leftmost or the rightmost wine, recursively calculate the
// answer and return the better one
return max(
profit(year+1, be+1, en) + year * p[be],
profit(year+1, be, en-1) + year * p[en]);
}
In alto, ho difficoltà a visualizzare. Innanzitutto penso a cosa restituisce la funzione alla fine della ricorsione, che è uno 0, quindi provo a calcolare il valore restituito dalla penultima alla ricorsione. Posso farlo per diversi passaggi finché non mi perdo.