ciao a tutti, sono riuscito a creare la lista ordinata versione iterativa e non riesco a creare la versione ricorsiva. vi lascio il codice in versione iterativa
codice:
#include <stdio.h>
#include <stdlib.h>
#include<assert.h>
struct sInfo{
    int value
};
typedef struct sInfo tInfo;
struct sNode{
    tInfo info;
    struct sNode *link;


};
typedef struct sNode tNode;
typedef  tNode* tList;
tList crea_lista();
tInfo leggi_info();
tList inserisci_elemento(tList lista,tInfo info);
void stampa_lista(tList lista);


int main()
{
  tList lista;
  tInfo info;
  int i,dim;
    lista=crea_lista();
    printf("quanti elementi inserire");
    scanf("%d",&dim);
    for(i=0;i<dim;i++){
        info=leggi_info();
        lista=inserisci_elemento(lista,info);


    }
    stampa_lista(lista);


}




//inizializza lista
tList crea_lista(){
return NULL;
}
tInfo leggi_info(){
tInfo info;
printf("Inserisci numero ");
scanf("%d",&info.value);
return info;
}
/*inserimento in ordine
1)ricerca della posizione
2)allocazione dinamica;
3)aggiornamento dei collegamenti


*/
tList inserisci_elemento(tList lista,tInfo info){
   tList prec,curr,newnode;
    prec=NULL;
    curr=lista;
    //1)ricerca della posizione di inserimento
    while((curr!=NULL)&&(info.value> curr->info.value )){
        prec=curr;
        curr=curr->link;




    }
    //2)allocazione dinamica
    newnode=(tNode *)malloc(sizeof(tNode));
    assert(newnode!=NULL);
    newnode->info=info;
    //3)aggiornamento dei collegamenti
    if(prec==NULL){
        newnode->link=lista;
        lista=newnode;
        return lista;
    }else{
        prec->link=newnode;
        newnode->link=curr;
        return lista;
    }


}
void stampa_lista(tList lista){
tList curr;
curr=lista;//curr è il primo nodo della lista
while(curr!=NULL){
        printf("%d ",curr->info.value);
    curr=curr->link;
}


}