[Python] Bisezione per ricorsione
Ciao! 
Ho un problema con l'implementazione della funzione di ricerca per bisezione di zeri (approssimati) di funzioni. Non credo sia un problema concettuale (poiché confrontandomi con altri e guardando in giro in rete mi pare di esserci), quanto un problema sintattico.
I problemi sorgono quando gli chiedo di fare qualcosa:

Ho un problema con l'implementazione della funzione di ricerca per bisezione di zeri (approssimati) di funzioni. Non credo sia un problema concettuale (poiché confrontandomi con altri e guardando in giro in rete mi pare di esserci), quanto un problema sintattico.
# ESERCIZIO: # definizione della funzione di ricerca per bisezione # cerca zeri (approssimati a n cifre decimali) di una funzione # nell'intervallo [a,b] def CercaZero(f, a, b, n=2): if a >= b: return 'deve essere a < b!' if f(a)*f(b) >= 0: return 'usa degli a e b per cui f(a)*f(b) < 0' if f(a) == 0: return a if f(b) == 0: return b m = (a+b)/2 if f(m) == 0: return m if b-a < 0.5*10**-n: return int(10**n*m)/10**n if f(a)*f(m) < 0: return CercaZero(f, a, m) else: return CercaZero(f, m, b)
I problemi sorgono quando gli chiedo di fare qualcosa:
>>> from math import exp >>> CercaZero(lambda x: exp(x)+x, -1, 0) -0.56 >>> CercaZero(lambda x: exp(x)+x, -1, 0, n=4) -0.56Cioè sembra che non si sia curato di quel [tt]n=4[/tt]. Come mai?
Risposte
Non [inline]CercaZero(lambda x: exp(x)+x, -1, 0, n=4)[/inline], ma bensì [inline]CercaZero(lambda x: exp(x)+x, -1, 0, 4)[/inline]. Dovrebbe funzionare!
Entrambe le notazioni vanno bene, il problema è che non passi n nelle chiamate ricorsive 
Ciao!

Ciao!
Sì, giusto. Non so perché ho pensato che avergli imposto n=4 una volta, l'avrebbe preso anche nelle chiamate successive, che diventsasse il nuovo default. Ho avuto un flashamento mentale.
E quindi come dovrei fare? Mettere "n=n" alle chiamate succesive?

Sì, o semplicemente:
Ciao!
if f(a)*f(m) < 0: return CercaZero(f, a, m, n) else: return CercaZero(f, m, b, n)
Ciao!
[inline]print('Grazie!')[/inline]
