|
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. | NEI PREFERITI | .:: | RSS Forum | RSS News | NEWS web | NEWS software | |
| PUBBLICITA' | | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | | CERCA nel FORUM » | |
14-07-2004, 12.21.43 | #1 |
Hero Member
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
|
Ricorsione in C
Codice:
#include <stdio.h> main(){ char stringa[80]; void inverti(char *); printf("\nInserisci una stringa:\n"); fgets(stringa, 80, stdin); printf("\nInvertita:"); inverti(stringa); printf("\n\n"); return 0; } void inverti(char *frase){ if(frase[0] == '\0') return; else{ inverti(&frase[1]); putchar(frase[0]); } } capisco la ricorsione ma non PERCHE' FUNZIONA!
___________________________________
...ad ogni alba sorgerà il tuo profumo |
14-07-2004, 12.38.07 | #2 |
Hero Member
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
|
pensandoci potrebbe essere così:
finché non trovo '\0' scorro tutto l'array con la ricorsione lasciando in sospeso le funzioni putchar() che arrivati alla fine verrando eseguite dall'ultima alla prima... è tanto diverso da come l'ho capita io?
___________________________________
...ad ogni alba sorgerà il tuo profumo |
14-07-2004, 12.55.51 | #3 | |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
Quota:
Frase = abcd\0 tieni in sospeso la putchar("a") e chiami inverti(bcd) tieni in sospeso la putchar("b") e chiami inverti(cd) tieni in sospeso la putchar("c") e chiami inverti(d) tieni in sospeso la putchar("d") e chiami inverti(\0) termini fai le putchar al contrario |
|
14-07-2004, 12.57.00 | #4 |
Gold Member
Top Poster
Registrato: 18-07-2002
Messaggi: 6.399
|
Ah, tanto per dire: questo è un bell'esempietto scolastico... se stai imparando a programmare beh, sono cose necessarie da capire, ma in un programma un minimo serio non ti sognare mai di fare in questo modo per invertire una stringa E' un suicidio!
|
14-07-2004, 13.03.57 | #5 |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
|
(Y) .. C'é la legge del taglione ...
come col GOTO... Bye |
14-07-2004, 13.12.21 | #6 |
Hero Member
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
|
.. .. preferisco la programmazione strutturata alla ricorsiva .. senza contare che con programmi un pochinò più corposi i pc cominciano a sudare e paingere con la ricorsione...
quello era solo un esempio che ho trovato su un libro... ...come idea mi ha stupito, per il resto... p.s. Dav, bella la sign
___________________________________
...ad ogni alba sorgerà il tuo profumo |
16-07-2004, 19.52.47 | #7 |
Hero Member
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
|
WEB, dopo le prime smanettate ho notato subito un certo odio alle funzioni come GOTO...
..quindi, da ipocrita, credendomi programmatore, non l'ho più utilizzata... forse una volta per fare in fretta... ma qual'è il motivo vero? oltre alla poca leggibilità del codice e alle difficili implementazioni successive che altri problemi può dare? comunque: GOTO
___________________________________
...ad ogni alba sorgerà il tuo profumo |
17-07-2004, 15.13.27 | #8 | |
Gold Member
Registrato: 07-01-2002
Loc.: Milano
Messaggi: 2.863
|
Quota:
Il GOTO non va usato (pena, taglio delle mani) nella programmazione perché genera errori di coerenza e di contiguità del flusso .. che diventa appunto discontinuo a causa dei salti che questa istruzione produce ... Inoltre si avranno pezzi di codice sparsi per il programma e in più un singolo "goto" ne genera altri .. poiché si creeranno situazioni dalle quali tu ti devi "divincolare" da questi pezzi di codice il programma diventa un goto tira l'altro generando errori ricorsivi sempre più grandi, limitandone fortemente la leggibilità e impedendone quasi il debug in situazioni estreme.... Faccio un esempio in pseudocodice: Codice:
:blocco A - ... istruzioni blocco A - se arrivo qui dal blocco B non devo rifarlo ma goto blocco C - controllo il flag del blocco C per vedere se è già stato chiamato da me :blocco B - .. istruzioni blocco b - Se succede qualcosa: goto blocco A :blocco C - istruzioni blocco C - se sono arrivato dal blocco B allora goto blocco A - se sono arrivato dal blocco A allora goto blocco D e setto il flag per far capire al blocco A di non chiamarmi più... :Blocco D Riposa in pace.... GOTO ... die! Bye |
|
17-07-2004, 15.45.23 | #9 |
Hero Member
Registrato: 09-05-2002
Loc.: COMO
Messaggi: 1.135
|
(Y)
___________________________________
...ad ogni alba sorgerà il tuo profumo |
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
[C++]esercizio ricorsione | antony88 | Programmazione | 1 | 21-03-2008 11.56.10 |
[C] Ricorsività | Downloader | Programmazione | 9 | 09-11-2007 17.17.46 |
[MySQL] Errore di sintassi | Lorenzo3 | Programmazione | 6 | 21-09-2007 22.40.05 |
[C/C++] Listare contenuto directory | Eteria | Programmazione | 13 | 21-07-2005 17.21.36 |
Funzioni ricorsive | GiulioCesare | Programmazione | 2 | 08-09-2003 23.40.11 |