Problema con funzione ricorsiva in C

spinoporco1
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
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
nessuno.nobody
Senza la definizione della funzione inc non possiamo sapere cosa fa quel pezzo di codice.

spinoporco1
"nessuno.nobody":
Senza la definizione della funzione inc non possiamo sapere cosa fa quel pezzo di codice.

ho corretto

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.

spinoporco1
"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.

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.

spinoporco1
"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?

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.