Originariamente inviato da Gianni91
Guarda l'ho sempre fatto e visto fare,infatti io passo dal chiamante solo il puntatore di testa della lista,quello é un valore di default che assegno...
magari mi sto confondendo,ma sapevo che questo risolveva il problema nel caso in cui avessi..
Ma questa:
codice:
void stampa(Elem* L,int k=1){
     if(L==0)return;
     stampa(L->pun,k+1);
     if((k%2)==0)cout<<L->info<<endl;
     }
E' una dichiarazione di funzione, non una chiamata a funzione.Prova a scrivere una funzione così e a compilarla, ti da errore.
originariamente inviato da Gianni91
ehm scusa ,non l'ho specificato prima,la funzione, infatti deve stampare al contrario,ed era proprio quel comportmento che volevo capire,ma come mai la stampa si comporta come una iterazione con una sola istruzione cout<<L->info<<endl;??..
Originariamente inviato da ramy89
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.