Sto cercando di calcolare e ^ x usando la ricorsione, e ^ x = e ^ (x / 2) * e ^ (x / 2), e il terzo ordine Espansione di Maclaurin per e ^ x e lo script continua a tornare 1. Non cerco una soluzione più accurata, semplicemente per capire dove lo script va male:)
Il mio pensiero è che con iterazioni sufficienti dovrebbe finire con (1 + x / N + (x / N) ^ 2/2) ^ N quando il valore della funzione scende sotto il limite.
def exp(x):
if abs(x)<0.0001:
return 1+x+x**2/2
else:
y=exp(x/2)
return y*y
risposte:
7 per risposta № 1Prova questo invece (nota il 2.0
nella chiamata ricorsiva):
def exp(x):
if abs(x) < 0.0001:
return 1 + x + x**2 / 2.0
else:
y = exp(x / 2.0)
return y * y
Sta fallendo perché se passi un numero intero in x
dire 1
, poi x / 2
fa la divisione intera (in python 2.x), che risulterebbe in 0
invece di 0.5
. Usando x / 2.0
, costringe Python ad usare la divisione float.
3 per risposta № 2
def exp(x):
if abs(x)<0.0001:
return 1+x+(x**2)/2.0
else:
y=exp(x/2.0)
return y*y
La divisione intera tronca. Hai bisogno di galleggianti qui.