Вычисление 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

Целочисленное деление усекает. Вам нужно плавать здесь.

Другие вопросы по тегам