Profilo di bomaires

Nome bomaires
Indirizzo email n/a
Messaggi3
  • Re: funzioni ricorsive casi a confronto (basic programing knowledge)
    Forum >> Principianti
    salve, mi scuso... sto facendo progressi..
    ho trovato una parziale spiegazione della meccanica ricorsiva che aiuta di più a capire che non l'elencazione di esempi e relativi output senza spiegazione del processo computazionale.
    ho trovato questo sito: https://www.askpython.com/python/python-recursion-function
    Per chi capiterà su questa discussione con i miei stessi dubbi, avrà le delucidazioni di merito.



    Mi rimane ancora il dubbio sull'esempio nr1, che ho fatto nel precedente post, sul perchè la serie non è in ordine decrescente.

    Partendo da un argomento k=5 la prima iterazione dovrebbe essere:

    result = [5 + tri_recursion(4)] + [4+tri_recursion(3)] + [3+tri_recursion(2)] + [2+tri_recursion(1)] + [1+tri_recursion(0)] =15

    la seconda iterazione dovrebbe essere:

    result =[4+tri_recursion(3)] + [3+tri_recursion(2)] + [2+tri_recursion(1)] + [1+tri_recursion(0)]=10

    e così via

    invece mi restituisce una serie numerica crescente...










    ---------


    --- Ultima modifica di bomaires in data 2020-04-25 11:13:08 ---


    --- Ultima modifica di bomaires in data 2020-04-25 11:29:01 ---

    --- Ultima modifica di bomaires in data 2020-04-25 14:06:37 ---

    --- Ultima modifica di bomaires in data 2020-04-25 14:07:34 ---

    --- Ultima modifica di bomaires in data 2020-04-25 14:10:38 ---
  • Re: Esercizio ricorsivo
    Forum >> Principianti
    Ti ringrazio molto,purtroppo ancora sono acerbo su queste funzioni ricorsive.
    Ho provato io come esercizio, però non ti assicuro che sia corretto:




    def is_even(string):
        if len(string)== 0:
            return False
        elif len(string)==1:
            return True
        else:
            return is_even(string[2:])
            
    print(is_even('quellochevuoi'))



    --- Ultima modifica di bomaires in data 2020-04-22 20:04:38 ---
  • funzioni ricorsive casi a confronto (basic programing knowledge)
    Forum >> Principianti
    Salve,

    scusatemi tanto se quella che sto per fare è una domanda troppo basilare. Sto apprendendo python facendo vari esercizi che si trovano in giro per il web, ed è da qualche giorno che mi sto “scervellando “ alla ricerca di risposte sul web.

    Non capisco la dinamica delle funzioni ricorsive!!!

    la “ricorsione” semplice è facile da comprendere; come per esempio in:
    def contoallarovescia(n):
     if n <= 0:
    	print('Via!')
     else:
    	print(n)
    	contoallarovescia(n-1)
    
    si tratta di un singolo auto-richiamo della stessa funzione con modifica iterativa decrescente del parametro.

    Quindi mi aspetto che se per esempio do “contoallarovescia(5)” la funzione mi stampi 6,5,4,3,2,1 Via! cosa che fa regolarmente.

    Fin qui tutto ok.



    Però la difficoltà di comprensione aumenta con altri due esempi:

    Esempio
    nr1:

            count=0
         def tri_recursion(k):
    	global count
    	count+=1
    	if(k > 0):
    		result = k + tri_recursion(k - 1)
    		print(result)
    	else:
    		result = 0
    	return result
    
    
    	tri_recursion(5)
    	print(count)

    in questo caso, simile a quello sopra riportato, l’esecuzione della funziona restituisce numeri crescenti. Come mai? Perché questo comportamento, per me inaspettato?

    0 1 3 6 10 15

    il valore di ingresso del parametro k non dovrebbe essere 5 ed andare scalando di a 1?

    Esempio
    nr2:
    def fibonacci(n):
    	pdb.set_trace()
    	if n <= 1:
    		return n
    	else:
    		return (fibonacci(n-1) + fibonacci(n-2))
    
    
    limite = int(input('Inserisci il numero di valori della serie che desideri vedere '))
    
    
    for num in range(1, limite+1):
    	print(fibonacci(num))
    

    anche in questo caso, già trattato più volte ma mai spiegato nella sua dinamica.

    Analizzando e cercando di esplodere le due “ricorsioni” fibonacci(n-1) e fibonacci(n-2) non arrivo proprio a capirne il processamento.
    Ipotizzando di impostare come parametro n=6 la successione risultante è:
    1
    1
    2
    3
    5
    8
    

    perché la prima iterazione dà: 1 (cioè la somma tra 0 e 1) mentre l’ultima iterazione dà: 8 (cioè la somma di 5 e di 3)? non dovrebbe ritornare una sequenza decrescente? Da dove saltano fuori quei numeri?


    Cercando di verificare come funziona la logica di esecuzione della funzione ricorsiva ho cercato di
    studiare i passi tramite debug:

    per l’Esempio1:

    mentre il valore di k decrementa di 1 da 5 a 0, per ogni iterazione lo stack
    di “result” mi da

    *** NameError: name 'result' is not defined

    come mai questo comportamento?


    per L’Esempio2:

    dopo la prima iterazione entra in questo “codice parallelo”

    class StdOutputFile(StdioFile):
    429 class StdOutputFile(StdioFile):
    430 def writable(self):
    431 return True
    432
    433 ->	def write(self, s):
    434 if self.closed:
    435 raise ValueError("write to closed file")
    436 s = str.encode(s, self.encoding, self.errors).decode(self.encoding, self.errors)
    437 return self.shell.write(s, self.tags)
    
    class StdInputFile(StdioFile):
    441 _line_buffer = ''
    


    Grazie
    per L'AIUTO E PER L'EVENTUALE spiegazione









    --- Ultima modifica di bomaires in data 2020-04-22 19:39:52 ---

    --- Ultima modifica di bomaires in data 2020-04-22 19:41:16 ---

    --- Ultima modifica di bomaires in data 2020-04-22 19:42:02 ---

    --- Ultima modifica di bomaires in data 2020-04-22 19:46:38 ---

    --- Ultima modifica di bomaires in data 2020-04-22 19:55:25 ---


    --- Ultima modifica di bomaires in data 2020-04-22 20:10:37 ---

    --- Ultima modifica di bomaires in data 2020-04-22 21:30:32 ---


    --- Ultima modifica di bomaires in data 2020-04-23 12:04:40 ---

    --- Ultima modifica di bomaires in data 2020-04-23 12:06:51 ---