【发布时间】:2017-01-28 03:46:48
【问题描述】:
一切都是正确的,但我的 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)
我知道我错过了一些东西。有人告诉我将 return 语句从 while 循环的范围中取出,但这只是一个无限循环。
从外壳:
fp_sqrt(2)
预期输出: (5, 1.414213562373095)
我的输出: (0, 1.414213562373095) 所以变量不会增加以显示我在循环中经历了多少次迭代。
【问题讨论】:
-
如果我把它带出范围,我不会有两个返回语句吗?这不是问题吗?
-
代码似乎有些混乱。要么做一些递归的事情,要么使用循环。不要试图同时使用两者。如果是递归的,它应该是你试图计算的函数调用——而不是循环迭代。
-
很抱歉,作业只想编辑 while 循环内的代码,而不更改其他任何内容。这就是我想出的,但是是的......有没有更好的方法来做我想做的事情?
-
回答你原来的问题:当
p_guess和c_guess接近时递归停止(不管它是什么意思)。在这种情况下,while循环进行零次迭代。iterations的值,循环前设置为0,不改变,一直返回给调用者。 -
您的帖子缺少 close(),您可以通过在循环内、函数启动/停止处添加打印语句来开始调试,或者尝试在 pythontutor.com 中运行它
标签: python loops while-loop increment