Problema con funzione ricorsiva in C
Forse sono troppo vecchio per studiare cose nuove. Sto cercando di capirci qualcosa di programmazione ma per ora non vado molto avanti.
Ho una funzione ricorsiva
Ma mi sfugge il suo funzionamento.
edit: c'era un errore
Ho una funzione ricorsiva
int inc( int m, int n) { if ( m==0 ) return n; else if ( n==0 ) return inc( m-1, 1 ); else return inc( inc(m-1,n-1), n-1 ); }
Ma mi sfugge il suo funzionamento.
edit: c'era un errore
Risposte
Senza la definizione della funzione inc non possiamo sapere cosa fa quel pezzo di codice.
"nessuno.nobody":
Senza la definizione della funzione inc non possiamo sapere cosa fa quel pezzo di codice.
ho corretto
Il codice è fatto apposta per essere ostico e sinceramente mi sembra che non vale gli sforzi necessari per capirlo.
Comunque la condizione di uscita è \(\displaystyle (0,n) \). Se quello è l'input si ha \(\displaystyle (0,n)\mapsto n \). In caso contrario devi passare da \((1,1)\), infatti si ha che \(inc(1-1,1-1) = inc(0,0) = 0\) e quindi il terzo passaggio porta al'uscita con risultato finale \(\displaystyle 0 \). Se non sbaglio non mi sembra che ci siano altre possibilità. Bisognerebbe dimostrare che la funzione effettivamente esce.
Comunque la condizione di uscita è \(\displaystyle (0,n) \). Se quello è l'input si ha \(\displaystyle (0,n)\mapsto n \). In caso contrario devi passare da \((1,1)\), infatti si ha che \(inc(1-1,1-1) = inc(0,0) = 0\) e quindi il terzo passaggio porta al'uscita con risultato finale \(\displaystyle 0 \). Se non sbaglio non mi sembra che ci siano altre possibilità. Bisognerebbe dimostrare che la funzione effettivamente esce.
"vict85":
Il codice è fatto apposta per essere ostico e sinceramente mi sembra che non vale gli sforzi necessari per capirlo.
Comunque la condizione di uscita è \(\displaystyle (0,n) \). Se quello è l'input si ha \(\displaystyle (0,n)\mapsto n \). In caso contrario devi passare da \((1,1)\), infatti si ha che \(inc(1-1,1-1) = inc(0,0) = 0\) e quindi il terzo passaggio porta al'uscita con risultato finale \(\displaystyle 0 \). Se non sbaglio non mi sembra che ci siano altre possibilità. Bisognerebbe dimostrare che la funzione effettivamente esce.
in teoria dovrebbe funzionare.
per questi valori ad esempio:
(0,3)
(1,3)
(2,3)
(3,3)
Mi sembra di capire che restituisca 3 come primo risultato, e poi boh.
Il codice esce ma mi sbagliavo sui risultati (ho fatto generare i risultati dal pc). Ho ignorato il fatto che le cose sono incapsulate l'uno dentro l'altro. Comunque a che ti serve saperlo? Non mi sembra che serva a molto come codice.
"vict85":
Il codice esce ma mi sbagliavo sui risultati (ho fatto generare i risultati dal pc). Ho ignorato il fatto che le cose sono incapsulate l'uno dentro l'altro. Comunque a che ti serve saperlo? Non mi sembra che serva a molto come codice.
A niente di pratico, però mi tormenta.
Che risultati ti ha dato?