PDA

Visualizza la versione completa : C Test ricorsione ..


roldo
26-03-2012, 10:00
..sanamente copiato non mi da risultato... a parte il warning: no newline at end of file !

Immagino che il problema sia nel main...però non lo vedo !!!
Grazie.






#include <stdio.h>

void printd(int n);


main()

{
int n = 123 ;
printd( n);
return 0 ;
}


void printd(int n)

{
if (n < 0)
{
putchar('-');
n = -n;
}

if (n / 10)

printd(n / 10);

putchar(n % 10 + '0');

}

valia
26-03-2012, 11:04
sai cosa deve fare il programma? risultato atteso? Già lo hai copiato e chiedi a noi di capirne la logica, almeno tu ci hai messo mano?

ramy89
26-03-2012, 11:38
Originariamente inviato da valia
sai cosa deve fare il programma? risultato atteso? Già lo hai copiato e chiedi a noi di capirne la logica, almeno tu ci hai messo mano?

Infatti :mem:
Chi legge il thread non sa qua'è il risultato atteso.

Per il warning basta andare a capo riga alle fine del file e salvarlo (questo dipende dal compilatore).

roldo
26-03-2012, 15:42
Avete ragione ..ma vedo che capite dei post a me poco comprensibili ...
Cerco di capire come funziona la ricorsione prendendo esempi da
http://cg.inf.unideb.hu/eng/rtornai/Kernighan_Ritchie_Language_C.pdf .
Avevo capito che se per esempio ci sono tre ricorsioni consecutive ,queste vanno in esecuzione
cosi : terzultima > penultima >ultima . Nell 'esempio , se faccio stampare 123 viene stampato 321...
Il mio libro tradotto in italiano mi dice che la ricorsione diventa cosi un metodo per girare le cifre al
posto di girare le cifre in un vettore .
Ora al programma se gli do 123 ...mi stampa 123 e cade la teoria del libro italiano !
Boh.

oregon
26-03-2012, 15:53
Sono confuso ...

La domanda qual è?

valia
26-03-2012, 16:04
ma prova a scrivere tu il programma anziché copiarlo!!!
Sono programmi di esempio e ce ne sono tanti errati, se vuoi debuggarlo fallo tu, ma mica puoi chiedere a noi perchè non funzoina l'esempio del tuo libro!!

valia
26-03-2012, 16:04
Originariamente inviato da oregon
Sono confuso ...

La domanda qual è?

perché in quel programma con input 123 ottengo 123 e non 321

ESSE-EFFE
26-03-2012, 16:21
Originariamente inviato da roldo
cosi : terzultima > penultima >ultima . Nell 'esempio , se faccio stampare 123 viene stampato 321...
Il mio libro tradotto in italiano mi dice che la ricorsione diventa cosi un metodo per girare le cifre al
posto di girare le cifre in un vettore .
Ora al programma se gli do 123 ...mi stampa 123 e cade la teoria del libro italiano !
Ma 123 è giusto... non credo intenda "girare" nel senso di "stampare in senso inverso", forse è solo un (brutto) sinonimo utilizzato al posto di "ciclare" (anch'esso brutto). Infatti, nell'esempio, non è un ciclo che stampa le varie cifre, ma la routine ricorsiva.

roldo
27-03-2012, 09:06
Originariamente inviato da ESSE-EFFE
........ Infatti, nell'esempio, non è un ciclo che stampa le varie cifre, ma la routine ricorsiva.

Infatti io volevo capire l' effetto della recursione. Da pagina 115 dello stesso libro si ordinano
delle parole con la tecnica dei nodi a destra e sinistra e la stampa perfeziona l ' ordinamento con la
ricursione sotto, grazie al fatto che il codice viene eseguito in modo inverso alla chiamata
Sono a posto , grazie.


/* treeprint: in-order print of tree p */
void treeprint(struct tnode *p)
{
if (p != NULL)
{
treeprint(p->left);
printf("%4d %s\n", p->count, p->word);
treeprint(p->right);
}
}

ramy89
27-03-2012, 16:55
Occhio ai termini, ho capito cosa intendi ma:
"il codice viene eseguito in modo inverso alla chiamata"
Non è il modo corretto di dirlo, non credo nemmeno che abbia senso come frase.

Loading