Iterativo a ricorsivo

di il
10 risposte

Iterativo a ricorsivo

Buongiorno mi aiutate a tradurre questo algoritmo ricorsivo in iterativo con l'uso dello stack

Algo(T,K_1,K_2,L)
if T=!Nil do
     L'=Algo(T-->f1,k_1,k_2,L)
     L'=Algo(T-->f2,k_1,k_2,')
     L'=Algo(T-->f3,k_1,k_2,L')
     if k_1<T-->Key<k_2
       L=Alloca_Nodo()
       L-->Key=T-->Key
       L-->next=L'
    else
       L=L'
return L
io ho fatto cosi:

algo_it(T,K1,K2,L)
 currT=T;
 currL=L;
 lastT=null;
 StackT=null;
 StackRet=null;
 StackL=null;
 nextT=null;
 nextL=null;
 ret=null;
 while(currT!=NULL || StackT!=null)do
    if(currT!=null)then
        StackT=Push(StackT, currT);
        StackL=Push(StackL, L);
           nextT=currT-->f1;
   else 
        StackT=Push(StackT, currT);
       StackL=Push(StackL, L);
          nextT=currT-->f2; 
          nextL=L';
     else 
        currT=Top(StackT);
         L=Top(StackL);
         if((lastT!=currT-->f3|| lastT!=currT-->f2) && (currT-->f3!=null|| currT-->f2!=null))then
             L'=ret;
             StackRet=Push(StackT,ret);
          else
            if( currT-->f3!=null)then
              L'=ret;
              Ret=Top(StackT);
            else
               if(currT-->f2!=null) then
                  L'=ret
                else 
                   last=currT;
                   currT=nextT;
                   currL= nextL;
                   StackT=Pop(StackT);
                   StackL=Pop(StackL);
                   StackRet=Pop(StackRet);
                if(k1 <= currT <= k2)then
                    L=Alloca_Nodo();
                    L-->Key= currT-->Key;
                    L-->next=L';
                else 
                  L=L'
return L
 
Grazie in anticipo

10 Risposte

  • Re: Iterativo a ricorsivo

    Tu l'hai fatto... quindi che aiuto vorresti?
  • Re: Iterativo a ricorsivo

    oregon ha scritto:


    Tu l'hai fatto... quindi che aiuto vorresti?
    vorrei capire se è corretto
  • Re: Iterativo a ricorsivo

    Ma questa

    if(k1 <= currT <= k2)then

    che vuol dire ? Non è C/C++ e non so cosa sia ... a parte che le then del BASIC nelle if non c'entrano nulla in questo contesto ...
  • Re: Iterativo a ricorsivo

    oregon ha scritto:


    Ma questa

    if(k1 <= currT <= k2)then

    che vuol dire ? Non è C/C++ e non so cosa sia ... a parte che le then del BASIC nelle if non c'entrano nulla in questo contesto ...
    Ma non è né c e ne c++ e pseudo codice
  • Re: Iterativo a ricorsivo

    Il then non è pseudocodice. E comunque questa

    if(k1 <= currT <= k2)

    anche in klingoniano ci spieghi che significa?
  • Re: Iterativo a ricorsivo

    oregon ha scritto:


    Il then non è pseudocodice. E comunque questa

    if(k1 <= currT <= k2)

    anche in klingoniano ci spieghi che significa?
    allora in realtà nell'algoritmo ricorsivo ho:
    T-->KEY
    DOVE
    -T e il nodo di un albero
    -key e la chiave
    in quello iterativo invece siccome ho che currT=T dove currT e il nodo corrente quindi ho:
    currT--->key
  • Re: Iterativo a ricorsivo

    Ma il problema non è quello
  • Re: Iterativo a ricorsivo

    oregon ha scritto:


    Ma il problema non è quello
    K1 e k2 sono i figli
  • Re: Iterativo a ricorsivo

    @sara... il problema è la doppia diseguaglianza che non puoi scrivere in quel modo ... come scrivi in c <= ... <= ?
  • Re: Iterativo a ricorsivo

    oregon ha scritto:


    @sara... il problema è la doppia diseguaglianza che non puoi scrivere in quel modo ... come scrivi in c <= ... <= ?
    ma infatti scusa ho sbagliato nell'algoritmo ricorsivo non ho <=...<= ma <...< ho sbagliato a trascrivere
    nel caso neanche cosi va bene allora non lo so il prof mi ha dato l'algoritmo ricorsivo, non è stato realizzato da me, ed io devo tradurro in iterativo
Devi accedere o registrarti per scrivere nel forum
10 risposte