Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    ricorsione multipla vs iterazione

    Salve a tutti.

    Ho necessità di trasformare una funzione ricorsiva multipla in versione iterativa.

    Questa e' la versione scritta in meta linguaggio o quasi. Il linguaggio finale e' il Batch DOS.

    codice:
    subroutine raypacket (from, to) 
       if from = to then raytraverse(from)  //problema banale 
       if from-to=1 then raytraverse(to); raytraverse(from) // problema banale
       else
          destination1=raytraverse(from)
          destination2=raytraverse(to)
         if destination1=destination2 then
               if from - to > 1 then linear_interpolate_distance(from,to)
         else begin
             rem ricorsione multipla
             raypacket (from, from+(to-from)/2)
             raypachet (from+(to-from)/2+1, to)
         end
       end
    Ancora non e' finita, ma diciamo che la struttura e' questa.

    Qualcuno sa aiutarmi?

    Grazie in anticipo.

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Ti basta una struttura dati qualsiasi nella quale inserisci le tuple (from, to) da analizzare, in base all'ordine di inserzione/rimozione si crea l'albero delle chiamate.
    Se utilizzi uno stack e inserisci i dati nell'ordine tupladestra, tuplasinistra ottieni il normale albero di chiamate.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    Ti basta una struttura dati qualsiasi nella quale inserisci le tuple (from, to) da analizzare, in base all'ordine di inserzione/rimozione si crea l'albero delle chiamate.
    Se utilizzi uno stack e inserisci i dati nell'ordine tupladestra, tuplasinistra ottieni il normale albero di chiamate.
    Grazie Scara95,

    credo di aver capito che le tuple le inserisco nello stack al posto delle chiamate ricorsive, ma non ho capito come fare il ciclo iterativo.

    codice:
    subroutine raypacket (from, to) 
       if from = to then raytraverse(from)  //problema banale 
       if from-to=1 then raytraverse(to); raytraverse(from) // problema banale
       else
          destination1=raytraverse(from)
          destination2=raytraverse(to)
         if destination1=destination2 then
               if from - to > 1 then linear_interpolate_distance(from,to)
         else begin
             rem 
             push(from,from+(to-from)/2) // raypacket (from, from+(to-from)/2)
             push(from+(to-from)/2+1,to) // raypachet (from+(to-from)/2+1, to)
         end
       end
    mi potresti accennare in pseudocode come fare?

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Non ho capito bene l'indentazione ma è una cosa del genere
    codice:
    subroutine raypacket (from, to)
       stack calls
       push(calls, (from, to))
       while not empty(calls) do
         (from, to) = pop(calls)
         if from = to then raytraverse(from)  //problema banale 
         if from-to=1 then raytraverse(to); raytraverse(from) // problema banale
         else
          destination1=raytraverse(from)
          destination2=raytraverse(to)
          if destination1=destination2 then
            if from - to > 1 then linear_interpolate_distance(from,to)
          else begin
            push(calls, (from+(to-from)/2+1,to))
            push(calls, (from,from+(to-from)/2))
          end
         end
       end
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    Non ho capito bene l'indentazione ma è una cosa del genere
    codice:
    subroutine raypacket (from, to)
       stack calls
       push(calls, (from, to))
       while not empty(calls) do
         (from, to) = pop(calls)
         if from = to then raytraverse(from)  //problema banale 
         if from-to=1 then raytraverse(to); raytraverse(from) // problema banale
         else
          destination1=raytraverse(from)
          destination2=raytraverse(to)
          if destination1=destination2 then
            if from - to > 1 then linear_interpolate_distance(from,to)
          else begin
            push(calls, (from+(to-from)/2+1,to))
            push(calls, (from,from+(to-from)/2))
          end
         end
       end
    Perfetto. Peccato per la while in batch dos e' di difficile implementazione
    Provo e ti faccio sapere. Ti ringrazio di nuovo.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.