[C] Problema esercizio ricorsione
Ciao a tutti!
Sempre problemi con le funzione ricorsive...
In questo esercizio son riuscito a fare solo una parte:
"Si scriva in C una funzione ricorsiva (che non deve pertanto fare uso di costrutti iterativi) che legga da input una sequenza di caratteri che termina con l’ingresso del carattere ’\n’, stampi a video la sequenza seguita dalla stessa sequenza in ordine invertito e, inoltre, restituisca in output il numero di caratteri inseriti. Ad esempio, se la sequenza letta fosse ’i’ d’ ’i ’ ’s’ la stampa prodotta sarebbe ’i’ d’ ’i ’ ’s’ ’s’ ’i ’ d’ ’i’ mentre l’output sarebbe 4".
In particolare la stampa dei caratteri è giusta. Non trovo il modo di contare i caratteri inseriti
. Ho provato cosi:
Che è giusto...cioè come output di caratteri inseriti fornisce effettivamente 4 ma nel punto di codice indicato con ** il compilatore mi dice questo: Variable 'occ' is used uninitialized whenever 'if' condition is false
Ma se all'inizio dichiaro int occ=0 il programma mi fornisce 0 come numero di caratteri inseriti
Sempre problemi con le funzione ricorsive...
In questo esercizio son riuscito a fare solo una parte:
"Si scriva in C una funzione ricorsiva (che non deve pertanto fare uso di costrutti iterativi) che legga da input una sequenza di caratteri che termina con l’ingresso del carattere ’\n’, stampi a video la sequenza seguita dalla stessa sequenza in ordine invertito e, inoltre, restituisca in output il numero di caratteri inseriti. Ad esempio, se la sequenza letta fosse ’i’ d’ ’i ’ ’s’ la stampa prodotta sarebbe ’i’ d’ ’i ’ ’s’ ’s’ ’i ’ d’ ’i’ mentre l’output sarebbe 4".
In particolare la stampa dei caratteri è giusta. Non trovo il modo di contare i caratteri inseriti

#include <stdio.h> int caratteriric(){ char c; int occ; c=getchar(); if(c != '\n'){ ** putchar(c); occ=1+caratteriric(); putchar(c); } return occ; } int main() { caratteriric(); printf("Il numero di caratteri inseriti è:%d\n",caratteriric()); return 0; }
Che è giusto...cioè come output di caratteri inseriti fornisce effettivamente 4 ma nel punto di codice indicato con ** il compilatore mi dice questo: Variable 'occ' is used uninitialized whenever 'if' condition is false
Ma se all'inizio dichiaro int occ=0 il programma mi fornisce 0 come numero di caratteri inseriti
Risposte
Quella variabile è effettivamente non inizializzata se c == '\n'. Dovresti inizializzarlo a 0 e rimuovere il primo putchar.
Se lo inizializzo a zero però poi mi stampa il valore 0 e inoltre se tolgo il primo putchar non mi stampa la prima parte della sequenza
Perché stai chiamando due volte la funzione nel main? Restituire zero nel caso in cui il valore letto sia quello di a capo è il comportamento corretto, per cui credo che il tuo problema possa essere un'altro..
Così dovrebbe andare...
#include <stdio.h> int caratteriric(){ char c; int occ=0; c=getchar(); if(c != '\n'){ putchar(c); occ=1+caratteriric(); putchar(c); } return occ; } int main() { printf("\nIl numero di caratteri inseriti è:%d\n",caratteriric()); return 0; }
Penso che sia più leggibile se memorizzi il valore di ritorno della funzione in una variabile e poi stampi la variabile.
Grazie a tutti per i consigli!