Ricorsione

di il
23 risposte

23 Risposte - Pagina 2

  • Re: Ricorsione

    Dato che è per domani, spero che all'esame non ti chiedano la ricorsione.
  • Re: Ricorsione

    oregon ha scritto:


    Dato che è per domani, spero che all'esame non ti chiedano la ricorsione.
    Si, ma io voglio capire questo esercizio!
  • Re: Ricorsione

    Ho provato a schematizzarti quello che succede:

    https://i.postimg.cc/c14L1gmJ/6gf.pn

    Nell'esempio che ho fatto ho considerato come array il seguente:
    b=[7,4,9];
    Seguendo lo schema, ossia le frecce rosse da START fino al ritorno al main(), sapresti dirmi quale dovrebbe essere l'output?
  • Re: Ricorsione

    Ok, con quello schema ho capito parecchio e ti ringrazio!

    Adesso vedo di dire cosa accade, considerando array iniziale
    b[7,4,9]


    La prima chiamata if(7<9), ok, verificato e si va direttamente a chiamata due, la chiamata due ha if(4<9), ok, verificato quindi da chiamata due si ha un return e si stampa il 4.
    Si riparte da chiamata due e siccome ancora e' ancora verificato if(7<9), si porta alla stampa il numero 7.
    Si riparte da chiamata due a chiamata 3 ma in questo caso, essendo diventato l'array
    b[4,7,9]

    e si ha non verificata la disequazione if(9<9) falso, allora si ha lo stop del programma.

    Risultato e'la stampa:

    4,7,9
  • Re: Ricorsione

    MT09_full ha scritto:


    Adesso vedo di dire cosa accade, considerando array iniziale
    b[7,4,9]

    La prima chiamata if(7<9), ok [...]
    Perché sarebbe if (7 < 9), scusa?

    Nel primo riquadro la condizione è (startIndex < size).
    Nell'intestazione c'è scritto che startIndex vale 0 e size vale 3.
    Come fa a diventare (7 < 9)?
  • Re: Ricorsione

    Io ho pensato che la disequazione si deve verificare con gli indici!
    Quindi, come giustamente dici, devo considerare le disequazioni con le posizioni dell'array, giusto?
  • Re: Ricorsione

    Allora, vediamo se ho capito questa volta...

    Step1) Chiamata 1, if (0<3), ok.
    Step 2) Si va direttamente a chiamata 2, if(1<3), ok.
    Step 3) Si va a chiamata 2, if(2<3), ok.
    Step4) Si va a chiamata 3, if(3<3), no, stop.
    Step 5) Iniziano i return da 2 ad 1 a 0 intesi come indici, ma intese come chiamate da 3 ad 2 ad 1.
    Step 6) Da chiamata 3 si stampa il 9
    Step 7) Da chiamata 2 si stampa il 4
    Step 8 ) Da chiamata 1 si stampa il 7

    Quindi la stampa sara':

    9,4,7
  • Re: Ricorsione

    MT09_full ha scritto:


    Io ho pensato che la disequazione si deve verificare con gli indici!
    Mi verrebbe da dire che, a prescindere da quello che hai pensato, nel dubbio tu guarda sempre e solo il codice, senza pensare a come dovrebbe essere, ma prendendo in considerazione quello che semplicemente è.

    MT09_full ha scritto:


    Quindi, come giustamente dici, devo considerare le disequazioni con le posizioni dell'array, giusto?
    Non saprei come dirlo, ma in quell'if() sono citati nomi di variabili, e i loro valori sono noti, quindi basta sostituirli: stai facendo dei ragionamenti ulteriori che sono estranei a quello che è indicato nel programma e ti confondono.

    MT09_full ha scritto:


    Allora, vediamo se ho capito questa volta...
    [...]
    Quindi la stampa sara':
    9,4,7
    A meno che non abbia preso un abbaglio io, direi che questa volta il flusso è quello corretto!

    Evidentemente, il peggior nemico di te stesso sei tu: negli step precedenti sembra che tu voglia vedere qualcosa di più che però non è scritto nel codice... non so perché. Dopo il sospiro di sollievo, invece, le cose sono andate meglio.
  • Re: Ricorsione

    Oleeeeee!
    Sono contento di essere riuscito a capire grazie alle vostre dritte!
    Vi ringrazioooooo!
    Adesso faro' altri esercizi e sono sicuro che riusciro'!

    Accipicchia, stavo impazzendo con quella ricorsione e non stavo riuscendo a trovare nulla su nessun testo o documento, che mi spiegasse quello che accadeva!

    Vi ringrazio!
Devi accedere o registrarti per scrivere nel forum
23 risposte