Trasformare algoritmo iterativo in ricorsivo

roberto167
traccia iterativo : letti 15 numeri sommi i positivi con i positivi e i negativi con i negativi

1)I=1:
2)introduci numero input n variabili : I=0 sp=0 sn=0
3)è n maggiore di 0? se si go to 8
4)sn=sn+n
5)I=I+1
6)I>15? se si go to 10
7)se no go to 2
8)sp=sp+n
9)go to 5
10)print
11)end

se qualcuno mi può aiutare a farlo diventare ricorsivo

Risposte
xneo1
sommaPos=0
sommaNeg=0
maxNumeri=15

leggi(sommaPos, sommaNeg, maxNumeri):
n=input("Inserisci numero")
maxNumeri=maxNumeri-1

if(n>0) sommaPos=sommaPos+n
else sommaNeg=sommaNeg+n

if(maxNumeri==0) end;
else leggi(sommaPos, sommaNeg, maxNumeri)

JackMek
Riprendendo l'algoritmo di xneo
Io la ricorsione la scriverei così

leggi(sommaPos, sommaNeg, maxNumeri):
    if(maxNumeri == 0) end;
    n = input("Inserisci numero")
    if(n > 0): 
        leggi(sommaPos+n, sommaNeg, maxNumeri-1)
    else: 
        leggi(sommaPos, sommaNeg+n, maxNumeri-1)

xneo1
Si, ho scritto di fretta, tra l'altro non volevo usare un linguaggio specifico.

roberto167
grazie così ci capisco poco,se potete scriverlo più o meno nel modo che ho scritto io quello itertivo,grazie

axpgn
Roberto, il problema è che loro usano (giustamente e come già ti avevo accennato) le funzioni (o routine o procedure o come cavolo le vuoi chiamare) mente tu usi i goto (che mi hai detto è il metodo che usate): così è un po' dura ...

Cordialmente, Alex

xneo1
1)l=15:
2sp=0 sn=0
3)introduci numero n
4) l=l-1
5)è n maggiore di 0? se si go to 7
6)sn=sn+n goto 9
7)sp=sp+n
8)se no go to 6)
9)se l==0 goto 11
10)se no chiama "RICORSIVAMENTE" la funzione a partire da 3)
11)print
12)end


Spero mi perdoniate per aver partorito questo mostro, più "ricorsivo di così" non si può fare

axpgn
Sinceramente ammiro lo sforzo che hai fatto ma ti vorrei chiedere due cose:
- alla riga 10 intendi "se no goto 3" dato che lui usa solo i goto ...
- non ho capito alle righe 1 e 2 se $l$ è uguale a 15 o zero ...

Cordialmente, Alex

xneo1
l è uguale a 15, probabilmente ci saranno altri errori, come ce ne sono nel "codice" postato da roberto167 (se n>0 goto 8 e quindi non eseguirà mai la linea 5 che incrementa il contatore.

Alla riga 10 intendevo proprio quello che ho scritto.
La ricorsione in questo caso penso si possa solo ottenere in questo modo. Senza funzioni o metodi o routines non c'è modo di ottenere ricorsione...

roberto167
"xneo":
l è uguale a 15, probabilmente ci saranno altri errori, come ce ne sono nel "codice" postato da roberto167 (se n>0 goto 8 e quindi non eseguirà mai la linea 5 che incrementa il contatore.

Alla riga 10 intendevo proprio quello che ho scritto.
La ricorsione in questo caso penso si possa solo ottenere in questo modo. Senza funzioni o metodi o routines non c'è modo di ottenere ricorsione...
quello che ho postato io si incrementa,ovvero una volta aver fatto la somma va al 5

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.