Ho provato ad elaborare una versione ricorsiva della procedura CalcoloSommaDiDueListe, ma il risultato non è corretto, ovvero la finestra di dev-Pascal ( il compilatore che uso) , si chiude al momento del calcolo della somma senza fornire i dati richiesti. Ecco il programma redatto in questa nuova versione:

codice:
program SommaDiDueListe(input,output);
label 99;
const bell=07;
type punt=^elem;
     elem= record
                 val: integer;
                 back : punt;
           end;
var p,q,s : punt;
    m,n,k : integer;

procedure LeggiEScriviLista( var p : punt; k : integer);
begin
     if k=0
     then p:=nil
     else begin
               new(p);
               read(p^.val);
               write(p^.val,' ');
               LeggiEScriviLista(p^.back,k-1);
          end;
end;{ Fine procedura LeggiEScriviLista }
procedure CalcoloSommaDiDueListe( var s : punt; p,q : punt; k : integer);
begin
     if k=0
     then s:=nil
     else begin
               new(s);
               s^.val:=p^.val+q^.val;
               case(s^.val)of
               0,1,2,3,4,5,6,7,8,9 :  write(s^.val,' ');
               10,11,12,13,14,15,16,17,18 : begin s^.val:=(s^.val)-10;
                                                  write(s^.val,' ');
                                                  s^.back^.val:=(p^.back^.val+q^.back^.val+1);
                                            end
               end;
               CalcoloSommaDiDueListe( s^.back,p^.back,q^.back,k-1);
          end;
end;{ Fine procedura CalcoloSommaDiDueListe }

{ Corpo del programma }
begin
     writeln('------------------------- Dati di ingresso --------------------------');
     writeln;
     write('Fornire la lunghezza della prima lista: ');
     readln(m);
     writeln;
     write('Fornire la lunghezza della seconda lista: ');
     readln(n);
     writeln;
     if m<n then begin
                      writeln(chr(bell),'Errore nei dati di ingresso!- STOP -');
                      goto 99;
                 end
            else begin
                      write('Fornire la prima lista: ');
                      LeggiEScriviLista(p,m);
                      writeln;
                      write('Fornire la seconda lista: ');
                      LeggiEScriviLista(q,n);
                      writeln;
                      writeln('La lista somma e'':');
                      CalcoloSommaDiDueListe(s,p,q,k);
                 end;
     99 :
     readln;

end.
Ringraziando sin d'ora chiunque di voi saprà fornirmi la versione corretta del programma ( ricorsiva o no ), saluto tutti gli amici del forum. Ciao!!!