一切都是正确的,但在我的while循环中发生了什么。 我试图递归地写这个函数,这就是我想出来的。
def fp(f, guess, error=0.0000000000001):
p_guess = guess
c_guess = f(p_guess)
iterations = 0
while not close(p_guess, c_guess, error=error):
next = f(guess)
iterations += 1
return fp(f, next, error=error)
return (iterations, c_guess)
def fp_sqrt(x):
return fp(lambda y: (y + x/y)/2, 1.0)
我知道我错过了什么。有人告诉我从while循环中取出返回语句,但这只是一个无限循环。
来自shell:
fp_sqrt(2)
预期产量: (5,1.414213562373095)
我的输出: (0,1.414213562373095) 因此变量不会递增以显示我在循环中经历了多少次迭代。
答案 0 :(得分:0)
你不应该通过递归来解决这个问题,而只需通过迭代并将结果重新分配回循环变量,例如:
while not close(p_guess, c_guess, error=error):
p_guess, c_guess = c_guess, f(c_guess)
iterations += 1
return iterations, c_guess
#fp_sqrt(2) -> (5, 1.414213562373095)
注意:next
是内置的,您不应将其用作变量名称
你可以使这个递归,但它使while
只是一个冗长的if
语句:
while not close(p_guess, c_guess, error=error): # if would suffice
iterations, result = fp(f, c_guess, error=error)
return iterations+1, result
return (0, c_guess)
#fp_sqrt(2) -> (5, 1.414213562373095)