Pagina 2 di 6 primaprima 1 2 3 4 ... ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 60

Discussione: [C] funzione ricorsiva

  1. #11
    Ho provato a farla cosi'....
    codice:
    int palindroma(char *parola){
    static int i=1;
    
    //controllo che la stringa passata non sia nulla
    if(parola == NULL) return 0;
    
    //condizione di uscita della ricorsione
    if(i == strlen(parola)) return 1;
    
    if(parola == parola[strlen(parola)-i] ){
    i++; 
    return palindroma(++parola);
    }
    
    }
    puo' andare?

    :F
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  2. #12
    conciso ed efficente

    codice:
     
    int palindroma(char *parola)
    {
     static unsigned int i=1;
    
     //controllo che la stringa passata non sia nulla
     assert(parola != NULL)
    
     //condizione di uscita della ricorsione
     if(i == strlen(parola)) return 1;
    
     if(parola == parola[strlen(parola)-i] )
     {
      i++; 
      return palindroma(++parola);
     }
    
    }
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  3. #13
    Originariamente inviato da Luc@s
    conciso ed efficente

    codice:
     
    int palindroma(char *parola)
    {
     static unsigned int i=1;
    
     //controllo che la stringa passata non sia nulla
     asser(parola != NULL)
    
     //condizione di uscita della ricorsione
     if(i == strlen(parola)) return 1;
    
     if(parola == parola[strlen(parola)-i] )
     {
      i++; 
      return palindroma(++parola);
     }
    
    }
    thz ma spiegami.......perchè hai modificato la mia funzione togliendo l'if,nel controllo della nullità della stringa passata,sostituendolo con asser?

    cosa fà questa funzione(asser() cioè )?
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  4. #14
    dimenticato la 't' di assert VVoVe:
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  5. #15
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936
    Vi siete ricalcati :maLOL:

    Comunque non vanno benissimo: se la richiamate due volte nello stesso programma fa casino, dato che la i resta in vita da una chiamata all'altra...

    Poi qui' c'e' un problema:
    if(parola == parola[strlen(parola)-i] )
    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

  6. #16
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936
    Originariamente inviato da andrea_NET-_DSL
    thz ma spiegami.......perchè hai modificato la mia funzione togliendo l'if,nel controllo della nullità della stringa passata,sostituendolo con asser?
    :maLOL:

    cosa fà questa funzione(asser() cioè )?
    assert() da per buono qualcosa... Qualcosa di scontato, qualcosa che teoricamente non dovrebbe/potrebbe avere altro valore...

    Ad esempio:
    codice:
    int i;
    for ( i = 0; i < 10; i ++ );
    assert ( i == 10 );
    E' impossibile che asser abbia un altro valore, se ce l'ha e' bene che il programma termini con un errore perche' c'e' qualcosa che non va...

    IMHO, l'uso che ne e' stato fatto non mi piace molto: "asser(parola != NULL)"
    Dato che non c'e' niente di teorico che vieti che si verifichi quella condizione... Io li' ci avrei messo un normalissimo controllo...
    Poi, bhe'... Non cambia molto

    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

  7. #17
    Originariamente inviato da /dev/null
    Vi siete ricalcati :maLOL:

    Comunque non vanno benissimo: se la richiamate due volte nello stesso programma fa casino, dato che la i resta in vita da una chiamata all'altra...

    Poi qui' c'e' un problema:
    if(parola == parola[strlen(parola)-i] )
    bè in risposta alla prima è vero...non avevo pensato di richiamarla + volte nello stesso programma

    per quanro rigurda la seconda xchè c'è un problema?

    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  8. #18
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936
    Originariamente inviato da andrea_NET-_DSL
    bè in risposta alla prima è vero...non avevo pensato di richiamarla + volte nello stesso programma

    per quanro rigurda la seconda xchè c'è un problema?

    Confronto tra puntatore e carattere
    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

  9. #19
    codice:
    int palindroma(char *parola)
    {
     static unsigned int i=1;
    
     //controllo che la stringa passata non sia nulla
     asser(parola != NULL)
    
     //condizione di uscita della ricorsione
     if(i == strlen(parola)) return 1;
    
     if(parola == parola[strlen(parola)-i] )
     {
      i++; 
      return palindroma(++parola);
     }
    
    }
    Si è concisa ed efficiente ma in questo modo avete in qualche modo "barato",infatti la funzione semplicemente salva in una locazione static l'informazione in più che gli serve invece di prenderla come parametro.
    Io ho provato a farlo senza questo tipo di sotterfugi (usare una variabile statica come voi o una variabile globale per la lunghezza l'ho scartato a priori come non risolutivo) e sono giunto alla conclusione che non è possibile farlo a meno di usare un array di appoggio in cui copiare ogni volta solo la sottostringa rimanente da parsare e passare quello alla successiva chiamata ricorsiva (ma così ciao ciao all'efficienza) .Spero che non ve la prendiate troppo per questa critica ma io la penso così.
    Il centro dell'attenzione non è sempre un buon posto in cui trovarsi

    Mai discutere con uno stupido, la gente potrebbe non capire la differenza. (O. W.)

  10. #20
    Originariamente inviato da unomichisiada
    codice:
    int palindroma(char *parola)
    {
     static unsigned int i=1;
    
     //controllo che la stringa passata non sia nulla
     asser(parola != NULL)
    
     //condizione di uscita della ricorsione
     if(i == strlen(parola)) return 1;
    
     if(parola == parola[strlen(parola)-i] )
     {
      i++; 
      return palindroma(++parola);
     }
    
    }
    Si è concisa ed efficiente ma in questo modo avete in qualche modo "barato",infatti la funzione semplicemente salva in una locazione static l'informazione in più che gli serve invece di prenderla come parametro.
    Io ho provato a farlo senza questo tipo di sotterfugi (usare una variabile statica come voi o una variabile globale per la lunghezza l'ho scartato a priori come non risolutivo) e sono giunto alla conclusione che non è possibile farlo a meno di usare un array di appoggio in cui copiare ogni volta solo la sottostringa rimanente da parsare e passare quello alla successiva chiamata ricorsiva (ma così ciao ciao all'efficienza) .Spero che non ve la prendiate troppo per questa critica ma io la penso così.
    no nn me la prendo.....almeno x me questo genere di post sono molto costruttivi



    ps la mia opinione è pero' che usare una var static non rappresenta in alcun modo un tipo di "sotterfugi" o workaround
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.