使用SymPy,递归函数返回“None”值

时间:2018-04-08 22:27:16

标签: python sympy

from sympy import *

x = Symbol('x')

f = (2*x) + 1

fprime = f.diff()

f = lambdify(x, f)
fprime = lambdify(x, fprime)
newtons_expr = lambdify(x, x - (f(x) / fprime(x)) )


def newtons_method(guess):

    approx = newtons_expr(guess)

    if Abs(approx - guess) < 0.001:
        print(approx) # <-- returns a float (-0.5)
        print(type(approx)) # <-- returns "<class 'float'>"
        return approx # <-- returns a None
    else:
        newtons_method(approx)

print(newtons_method(1))

我使用SymPy构建了这个函数,使用牛顿方法计算方程的一个解。但是,出于某种原因,它返回None而不是float,即使它在返回值approx之前显式打印了一个浮点数。这有什么不对?我以前从未见过这个。

1 个答案:

答案 0 :(得分:0)

谢谢@PaulRooney!

我的错误在于:

else:
    newtons_method(approx)

当您调用递归函数时,您需要让它在每次调用时都返回;否则,它将返回None。它应该是:

else:
    return newtons_method(approx)

我发现这个视频解释了#34;调用堆栈&#34;保罗在我们的讨论中提到过。我看了它,它给了我一些关于我的功能在逻辑上做什么的见解: https://www.youtube.com/watch?v=k0bb7UYy0pY