No, L==0 è stato inserito al posto L==NULL (che è equivalente), perchè la lista finisce quando si incontra un puntatore a NULL.Originariamente inviato da alukard990
L==0 dovrebbe essere l'inizio della lista quindi si considera 0 come pari e si va all'elemento di posto 1...poi prima del return non dovresti fare una chiamata ricorsiva in cui passi l'elemento successivo della lista? credo che rimanga sempre bloccato all'elemento iniziale...e comunque se esiste una soluzione iterativa ovvia(come credo che nel tuo caso sia anche piuttosto banale)la ricorsione va evitata in quanto la applichi ad algoritmi che siano di loro stessa natura ricorsivi e quando le prestazioni del sistema sono un punto dolente
L è un puntatore, non un intero.Non si controlla se l' indirizzo contenuto in L è pari, si controlla k.
Un' evidente errore di sintassi è questo:
Non puoi fare un assegnamento nella dichiarazione dei parametri della funzione.codice:void stampa(Elem* L,int k=1) // sbagliato void stampa(Elem *m, int k)
Un' altra cosa che noto è che la chiamata ricorsiva avviene prima di stampare i valori se k è pari, per cui stamperà i valori all' incontrario.
Ad esempio hai {10,15,17,29} nella lista, 10 e 17 sono in posizione pari.
Chiami stampa(L,0), che a sua volta chiama stampa(L,1) che chiama stampa(L,2), che chiama stampa(L,3) che chiama stampa(L,4).In stampa(L,4) L==NULL per cui si torna alla stampa(L,3), dove l' elemento non è pari per cui non viene stampato.Si torna alla stampa(L,2) e stampa 17, in stampa(L,1) k è dispari per cui non viene stampato, mentre in stampa(L,0) k è pari per cui viene stampato 10, ma se li vuoi stampare in ordine devi invertire le istruzioni: prima la stampa e poi la chiamata ricorsiva.

Rispondi quotando