Вычисление exp(x) с использованием рекурсии в Python
Я пытаюсь вычислить e ^ x, используя рекурсию, e ^ x = e ^ (x / 2) * e ^ (x / 2) и расширение Маклаурина третьего порядка для e ^ x, и скрипт продолжает возвращать 1. I Я не ищу более точное решение, просто чтобы понять, где сценарий идет не так:)
Я думаю, что при достаточном количестве итераций он должен заканчиваться (1+x/N+(x/N)^2/2)^N, когда значение функции становится ниже предела.
def exp(x):
if abs(x)<0.0001:
return 1+x+x**2/2
else:
y=exp(x/2)
return y*y
2 ответа
Попробуйте это вместо этого (обратите внимание на 2.0
в рекурсивном вызове):
def exp(x):
if abs(x) < 0.0001:
return 1 + x + x**2 / 2.0
else:
y = exp(x / 2.0)
return y * y
Это терпит неудачу, потому что если вы передаете целое число для x
, сказать 1
, затем x / 2
делает целочисленное деление (в Python 2.x), что приведет к 0
вместо 0.5
, Используя x / 2.0
, это заставляет Python использовать деление поплавка.
def exp(x):
if abs(x)<0.0001:
return 1+x+(x**2)/2.0
else:
y=exp(x/2.0)
return y*y
Целочисленное деление усекает. Вам нужно плавать здесь.