raga' non perdiamo il senso del 3dsoluzioni???
ps cmq la proceduta che ho scritto prima e' quella piu' semplice, la prima che mi viene in mente risolvendo il problema in modo iterativo, la complessita' non e' un problema ora...![]()
raga' non perdiamo il senso del 3dsoluzioni???
ps cmq la proceduta che ho scritto prima e' quella piu' semplice, la prima che mi viene in mente risolvendo il problema in modo iterativo, la complessita' non e' un problema ora...![]()
fino a qui ti potrei aiutare a sviluppare in C una funzione ricorsiva...Originariamente inviato da shAke82
hai una lista di interi ed un intero x:
il primo elemento della lista e' uguale a x?
se no
il primo + secondo elemento della lista = x?
se no
il primo + secondo + .... i-esimo elemento della lista = x?
ma qua è il problema...
se no, non esistono finestre della lista uguali a x e ritorni falso...altrimenti ritorni vero :P
csa significa??![]()
![]()
intanto cerco di sviuluppare la prima parte
ciao!![]()
![]()
Vediamo..sogni che diventano professione...passioni che diventano vita...Free as in Freedom...
ah un altra cosa...il confronto tra gli elmenti non te lo sviluppo tramite lista ma su array.
Va bene anche cosi'e cmq se propio ti serve la lista la implementi dal mio array
![]()
![]()
Vediamo..sogni che diventano professione...passioni che diventano vita...Free as in Freedom...
se non trovi nessuna finestra uguale a x allora la funzione ritorno 1...se trovi un finestra uguale allora ritorni 0
il problama deve verificare se esiste una finestra percio' deve ritornare 0 o 1 :tongue:
sento puzza di bruciato :adhone: cmq se poi si puo' riportare alle liste fa pureOriginariamente inviato da andrea_NET-_DSL
ah un altra cosa...il confronto tra gli elmenti non te lo sviluppo tramite lista ma su array.
Va bene anche cosi'e cmq se propio ti serve la lista la implementi dal mio array
![]()
![]()
anche se gli array hanno delle proprieta' che le liste non hanno, per esempio se sei all'elemento 8 di un array sai il valore dell'elemento 3...mentre in una lista no (ammenoche' non te lo sia salvato da qualke parte :tongue: )
con le liste non ti so aiutare...sto scrivendo la funzione ricorsiva prendila come esempio per capire meglio la ricorsione poi vedi tuOriginariamente inviato da shAke82
sento puzza di bruciato :adhone: cmq se poi si puo' riportare alle liste fa pure
anche se gli array hanno delle proprieta' che le liste non hanno, per esempio se sei all'elemento 8 di un array sai il valore dell'elemento 3...mentre in una lista no (ammenoche' non te lo sia salvato da qualke parte :tongue: )![]()
![]()
![]()
ps puzza di bruciato :zamm: ehehe :gren: :gren:
![]()
Vediamo..sogni che diventano professione...passioni che diventano vita...Free as in Freedom...
Ok fatto funge,controlla se è come dicevi tu cmq![]()
ciaocodice:#include <stdio.h> #include <stdlib.h> /* var globale usata alla funz ricorisva per "scorrere" l'array */ int i=0; /* prototipo della funz ricorisiva */ int ricorsiva(int *,int,int); int main(){ int x=0,tmp=0; int lista_elementi[]={3,4,9,18,2,1}; printf("inserisci un numero x : \n"); scanf("%d",&x); int app; //val dove verrà salvato il ritorno delle funzione ricorisva app=ricorsiva(lista_elementi,tmp,x); printf("\nIl ritorno della funzione ricorisva e' %d\n\n",app); } int ricorsiva(int *elementi,int tmp,int x){ /* passo alla funzione l'array con gli elementi,il numero x per il confronto e una var di appoggio(tmp) per la ricorsione */ if ( (tmp=tmp+elementi[i]) == x ) return 0; /* efettuo la sommatoria degli elementi dell'array in modo ricorsivo per confrontrala,passo passo, con x immesso in input */ else { i++; //incremento il cont dell'array per "scorrerlo" alla prossima chiamata ricorsiva return ( ricorsiva(elementi,tmp,x) ); //altrimenti richiamo la funzione dentro se stessa,dando vita alla ricorsione } }![]()
ps te l'ho anche commentato cosi' spiego cosa ho fatto :gren:
ps certo è la prima versione fatta in pochissimo tempo,vedi tu cosa migliorare/aggiungere
Ah importante!:gren: quando non c'è nessuna "maschera" non stampa il printf che comunica il ritorno della funzione.Non so perchè...sto vedendo.
Quando c'è,inserendo 16 ad es,ritorna 0 e stampa a video il messaggio
Vediamo..sogni che diventano professione...passioni che diventano vita...Free as in Freedom...
int ricorsiva(int *elementi, int tmp, int x)
{
if ( (tmp=tmp+elementi[i]) == x ) return 0;
else
{
i++;
return ricorsiva(elementi,tmp,x)
}
}
ma se non trova una finestra di peso "x" quando esce sto programma??
Mettici una array che non ha finestre uguali ad x e vedrai che ti andra' in palla...il return 0 viene eseguito quando trova una finestra uguale, mentre se non ne trova la "i" continuera' a scorrere all'infinito
ps cmq e' facilmente adattabile alle liste...![]()
e' NATA!!
int verifica (list *p, int tmp, int x)
{
........ if((tmp=tmp+(p->info))==x) return 0;
........ else
........ {
........ ........ if(p->next!=NULL) return (verifica(p->next,tmp,x));
........ ........ else return 1;
........ }
}