虽然循环不迭代

时间:2017-01-28 03:46:48

标签: python loops while-loop increment

一切都是正确的,但在我的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) 因此变量不会递增以显示我在循环中经历了多少次迭代。

1 个答案:

答案 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)