Pagina 6 di 6 primaprima ... 4 5 6
Visualizzazione dei risultati da 51 a 60 su 60

Discussione: [C] funzione ricorsiva

  1. #51
    impossibile ....
    leggi il MIO ULTIMO POST(escludendo questo dove sto scrivendo) dove ho rilasciato il codice finale!



    ps cancella il file,creane uno nuovo e compilalo di nuovo!
    Ho provato a a fare anche tutto questo e ciao è sempre palindroma
    Boh,boh!!!
    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.)

  2. #52
    Originariamente inviato da adarkar
    Originariamente inviato da andrea_NET-_DSL
    codice:
    /* realizzato da AnDr3a_NeT */
    #include<stdio.h>
    
    int palindroma(char *parola){
    static int i=1;
    static int j=0;
    
    //controllo che la stringa passata non sia nulla
    if(parola == NULL) return 0;
    
    //condizione di uscita della ricorsione
    if(i == strlen(parola)) { i=1; j=0; return 1;}
    
    
    if(parola[j] == parola[strlen(parola)-i] ){
    ++i;
    ++j;
    return palindroma(++parola);
    }
    
    /*
     * ma qui non ci starebbe bene un return 0?
     */
    
    }
    si
    in questo modo ad es
    codice:
    /* realizzato da AnDr3a_NeT */
    #include<stdio.h>
    
    int palindroma(char *parola){
    static int i=1;
    static int j=0;
    
    //controllo che la stringa passata non sia nulla
    if(parola == NULL) return 0;
    
    //condizione di uscita della ricorsione
    if(i == strlen(parola)) { i=1; j=0; return 1;}
    
    
    if(parola[j] == parola[strlen(parola)-i] ){
    ++i;
    ++j;
    return palindroma(++parola);
    }
    else
    return 0;
    }
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  3. #53
    questo è ciò che tirai fuori l'anno scorso quando ci han dato l'esercizio di fare una func per i palindromi:

    codice:
    int is_palin(char *str)
    {
      int len = -1;
      while (str[++len]);
      int i = 0, j = len-1;
      while (i < len && j >= 0)
      {
        while (str[i] == ' ') ++i;
        while (str[j] == ' ') --j;
        if (str[i++] != str[j--]) return 0;
        if (j - i <= 0) break;
      }
      return 1;
    }
    ..sì, non è ricorsiva
    però funziona meglio mi sa
    @_=(115,-17,6);print+map{chr$_[$.=$_-$_]*$_**$.+++$_[$.]*$_**$.+++$_[$.]*$_**$.}$.-$...$#_

  4. #54
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936
    Originariamente inviato da andrea_NET-_DSL
    no...la funziona ritorna se stessa(detta quindi ricorsiva)fino a che non si siano scansionati tutti i caratteri e infine,se quando detto precedentemente,è andato a buon fine 1.

    Se la stringa passata è nulla,cioè vuota,ritorna 0.

    E' uguale... C'andrebbe un return 0 (oppure 1, oppure 255) perche' il C ansi prevede che l'ultima istruzione di una funzione non-void sia un return
    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

  5. #55
    Originariamente inviato da /dev/null
    E' uguale... C'andrebbe un return 0 (oppure 1, oppure 255) perche' il C ansi prevede che l'ultima istruzione di una funzione non-void sia un return
    si infatti nn ci ho messo nulla
    Vediamo..sogni che diventano professione...passioni che diventano vita... Free as in Freedom...

  6. #56
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936
    Originariamente inviato da adarkar
    argh avete continuato un bel po' su questo codice da fixare ma io (sn sincero ) nn sn riuscito a leggere tutto tutto tutto

    però per quanto riguarda la parte "filosofica" della funzione avete detto e fatto anche praticamente quel che avevo dett io nel mio primo post qua
    ovvero che se si passa un solo parametro è indispensabile l'uso di "sotterfugi" quali una var static oppure la duplicazione della stringa in modo da avere alla fine ancora una cosa diversa dall'orginale per lavorare, quest'ultima in realtà non l'avevo pensata, ma in fondo usa davvero troppa memoria
    Vabbe'... Troppa memoria.... Se lo fai con parole normali (con meno di 10.000 caratteri) ne occupa una quantita' superflua... Un centinaio di meghi te li usa solo con parole grosse 1 mega (oltre 1.000.000 di caratteri)
    Certo, l'utilizzo di variabili static rende tutto piu' semplice, ma utilizzare variabili static non e' una bella cosa: static ~= global e e' sempre bene farne a meno

    (fatene tanti di thread così per studiare algoritmi e bug vari )
    Sono d'accordo
    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

  7. #57
    Originariamente inviato da adarkar
    questo è ciò che tirai fuori l'anno scorso quando ci han dato l'esercizio di fare una func per i palindromi:

    codice:
    int is_palin(char *str)
    {
      int len = -1;
      while (str[++len]);
      int i = 0, j = len-1;
      while (i < len && j >= 0)
      {
        while (str[i] == ' ') ++i;
        while (str[j] == ' ') --j;
        if (str[i++] != str[j--]) return 0;
        if (j - i <= 0) break;
      }
      return 1;
    }

    ..sì, non è ricorsiva
    però funziona meglio mi sa
    bè naturale...non essendo ricorsiva occupa meno memoria!

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

  8. #58
    Originariamente inviato da andrea_NET-_DSL
    no...la funziona ritorna se stessa(detta quindi ricorsiva)fino a che non si siano scansionati tutti i caratteri e infine,se quando detto precedentemente,è andato a buon fine 1.

    Se la stringa passata è nulla,cioè vuota,ritorna 0.

    ok.. ma io intendevo che non tutti i percorsi raggiungono un return
    @_=(115,-17,6);print+map{chr$_[$.=$_-$_]*$_**$.+++$_[$.]*$_**$.+++$_[$.]*$_**$.}$.-$...$#_

  9. #59
    Originariamente inviato da adarkar
    codice:
    int is_palin(char *str)
    {
      int len = -1;
      while (str[++len]);
      int i = 0, j = len-1;
      while (i < len && j >= 0)
      {
        while (str[i] == ' ') ++i;
        while (str[j] == ' ') --j;
        if (str[i++] != str[j--]) return 0;
        if (j - i <= 0) break;
      }
      return 1;
    }
    ma c'è un bug assurdo e io me ne accorgo solo ora?! VVoVe: VVoVe: VVoVe:
    quando tira via gli spazi, metti che la stringa è tutta fatta di spazi quello va a leggere fuori dalla memoria della stringa VVoVe: VVoVe:
    @_=(115,-17,6);print+map{chr$_[$.=$_-$_]*$_**$.+++$_[$.]*$_**$.+++$_[$.]*$_**$.}$.-$...$#_

  10. #60
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936
    Originariamente inviato da adarkar
    ma c'è un bug assurdo e io me ne accorgo solo ora?! VVoVe: VVoVe: VVoVe:
    quando tira via gli spazi, metti che la stringa è tutta fatta di spazi quello va a leggere fuori dalla memoria della stringa VVoVe: VVoVe:
    :maLOL: :maLOL: :maLOL:
    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

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.