ciao sto studiando un programma che permetta di creare una lista di stringhe concatenate
con lunghezza opzionale e successivamente le
stampi a video con una funzione ricorsiva ;
ora il problema è che la funzione ricorsiva ( ricerca) stampa a video solo l'ultimo elemento
della lista e non tutta

a questo punto mi chiedo dove sbaglio

questo è il codice ;






codice:

================================
typedef struct {
	char value [11] ;
	struct list *next ;
} list ;  /* definisco la struttura */


typedef list *listPtr ;

void inserisci ( listPtr *Head , char valore [] , int size ) ;
void ricerca (listPtr headR ) ;





int main () 


{
	listPtr Testa = NULL ; /* situazione iniziale non ci sono nodi */
	int chooce ;
	char parola [10] ;
	int numeroStringhe = 0 ;
    



        printf ("scegli 1 per uscire  o premi un tasto per cominciare \n\n" ) ;
	scanf ("%d" , & chooce ) ;


	
	while (chooce != 1 )

	{
	
	fprintf (stdout , "\n\n") ;
	inserisci  ( &Testa , parola , 10) ;
	numeroStringhe++ ;

	

	scanf ("%d" , & chooce ) ;
	}


	ricerca (Testa ) ;
	

		
	system ("PAUSE") ;


	return 0 ;


}


void inserisci ( listPtr *Head ,  char valore [] , int size )

{
	listPtr Nuovo ;


	Nuovo = malloc ( sizeof ( list ) ) ;

		if ( Nuovo != NULL )
		{
			if ( *Head == NULL )
			{
				
				*Head = Nuovo ;
				 fprintf (stdout , "inserisci la stringa o 1 per terminare\n") ;
		                 gets ( Nuovo->value  ) ; 
		                 Nuovo->next = NULL ;
		      
		
			}

			else
			{
				(*Head)->next  = Nuovo ;
				 fprintf (stdout , "inserisci la stringa o 1 per terminare\n") ;
				 gets ( Nuovo->value  ) ;
				 Nuovo->next = NULL ;
				
			}




		} /* fine if */



}




void ricerca ( listPtr headR ) 
{
	
    fprintf (stdout , "%s\n" , headR->value  ) ; 


	while (headR->next != NULL ) /* cicla finche ci sono elementi */
	{
	headR = headR->next ;
	ricerca ( headR) ;
        }
	
	
		
}


altra domanda ; qual'è il modo migliore secondo voi per capire sta benedetta ricorsione ?

grazie