Pagina 1 di 6 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 60

Discussione: [C] funzione ricorsiva

  1. #1
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    50

    [C] funzione ricorsiva

    Ciao che ve ne pare di questa funzioncina in termini di occupazione di memoria e di velocità di esecuzione...
    la funzione ritorna 1 se la stringa è palindroma, 0 altrimenti...



    #include <stdio.h>
    #include <string.h>

    int pal(char *str, char *p)
    {
    if(p<str)
    return 1;
    if(*str==*p)
    return pal(++str,--p);
    if(*str!=*p)
    return 0;

    };


    int main(int argc, char **argv)
    {
    char str[20]="rrssrr";

    if(pal(str,&str[strlen(str)-1]))
    printf("Parola palindroma");
    else
    printf("Parola non palindroma");

    getchar();
    return 0;
    }

  2. #2
    codice:
     
    int pal(char *str, char *p)
    {
            // controlliamo nn siano nulli
    	assert(str != NULL);
    	assert(str != p);
            // controlliamo nn siano finiti
    	if(str == 0 || p == 0) return 0;
    	if(p<str) return 1;
    
    	if(*str==*p)return pal(++str,--p);
    
    	if(*str!=*p)return 0;
    
    };

    Cosi?
    La stupidità umana e l'universo sono infinite.
    Della seconda non sono certo(Einstein)

    Gnu/Linux User

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2003
    Messaggi
    50
    Scusa ma perchè...non si possono confrontare due puntatori...

    if(p<str) ?

    quanti if hai fatto... :master:

  4. #4

    SFIDA

    qualcuno riesce a fare la funzione che dice se una parola e' palindroma IN RICORSIVO passando solo la stringa ???

    int palindroma (char *str);

  5. #5
    qualcuno riesce a fare la funzione che dice se una parola e' palindroma IN RICORSIVO passando solo la stringa ???

    int palindroma (char *str);
    Sei sicuro solo la stringa, o anche la lunghezza?
    La stringa deve avere il terminatore,altrimenti,se non come si fa...fammi sapere che ci provo
    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.)

  6. #6
    Una stringa e' una stringa perche' ha il terminatore '\0' alla fine...
    altrimenti sarebbe solamente un vettore (array) di caratteri.

  7. #7

    Re: SFIDA

    Originariamente inviato da _sys/sid
    qualcuno riesce a fare la funzione che dice se una parola e' palindroma IN RICORSIVO passando solo la stringa ???

    int palindroma (char *str);
    se passi solo la stringa allora credo sia necessario l'uso di variabili static altrimenti la func non ha abbastanza informazioni
    @_=(115,-17,6);print+map{chr$_[$.=$_-$_]*$_**$.+++$_[$.]*$_**$.+++$_[$.]*$_**$.}$.-$...$#_

  8. #8
    Originariamente inviato da teoplc
    Scusa ma perchè...non si possono confrontare due puntatori...

    if(p<str) ?

    quanti if hai fatto... :master:
    @_=(115,-17,6);print+map{chr$_[$.=$_-$_]*$_**$.+++$_[$.]*$_**$.+++$_[$.]*$_**$.}$.-$...$#_

  9. #9
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936
    Se mi spiegate il significato di palindromo ci provo anch'io




    Uhm... Mi sono appena alzato, il cervello deve ancora partire, quindi la potrei sparare grossa
    Ma il confronto tra 2 puntatori com'e' stato fatto li' che senso ha?
    codice:
    int * a, b;
    a < b;
    Quest'istruzione non compara solamente l'indirizzo dei due puntatori? Quindi che senso ha in un programma cosi'?
    Non ci vorrebbe ad esempio:
    codice:
    int * a, b;
    *a < *b;


    A meno che str e p siano della stessa stringa e vada fatto un controllo per sapere se siamo un carattere piu' avanti o piu' indietro.... E' questo il caso?
    Ultima modifica ad opera dell'utente /dev/null il 01-01-0001 alle 00:00

  10. #10
    Utente di HTML.it L'avatar di /dev/null
    Registrato dal
    May 2004
    Messaggi
    1,936
    L'ho capito
    Se c'e' qualche altro ignorantone come me che non sa cosa sia: http://www.splash.it/giochi/enigmistica/palindromo/

    ...Bhe'... Per farlo con la ricorsione passando una sola variabile un modo c'e', ma non so quanto sia corretto:
    codice:
    /*
     * Si compila con
     * gcc -o palindromo palindromo.c
     */
    
    #include <stdio.h>
    #include <string.h>
    
    #define		DIM		128
    #define		RICORSIVA	0
    //#define		ITERATIVA	1
    
    int palindromo ( const char * par );
    
    int main ( )
    {
    	char parola [ DIM ];
    	
    	while ( 1 ) {
    		printf ( "Inserisci una parola, ti diro' se e' un palindromo. (\"exit\" per uscire).\n" );
    		scanf ( "%s", parola );
    		
    		if ( ! strcmp ( parola, "exit" ) )
    			break;
    		
    		if ( palindromo ( parola ) ) 
    			printf ( "\"%s\" e' un palindromo.\n", parola );
    		else
    			printf ( "\"%s\" non e' un palindromo.\n", parola );
    	}
    	
    	return 0;
    }
    
    int palindromo ( const char * par )
    {
    #ifdef		RICORSIVA
    	
    	char * parola = strdup ( par );
    	int lunghezza = strlen(parola);
    	
    	if ( *parola == '\0' || *(parola+1) == '\0' )
    		return 1;
    	
    	if ( *parola != *(parola+lunghezza-1) ) {
    		return 0;
    	} else {
    		*parola = '\0';
    		*(parola+lunghezza-1) = '\0';
    		return palindromo ( parola + 1 );
    	}
    		
    #elif defined	ITERATIVA
    	
    	/* vabbe', e' facile... */
    	return 0;
    	
    #endif
    }



    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 © 2024 vBulletin Solutions, Inc. All rights reserved.