牛顿平方根近似值-但是它不会返回值吗?

时间:2019-06-19 09:45:41

标签: python sicp

因此,我试图跟随Python中的SICP讲座,并为牛顿方法找到平方根近似值构建了简单的黑盒模型。

代码本身似乎运行良好,但是我的函数不断返回None?在下面的tryfor函数中,我将其打印出来并返回了近似值,以便父函数可以返回近似值。

我从打印功能知道我的代码可以找到正确的答案。但是,当我编写print(NewtonSqrt(2))时,返回None-我的近似值尚未“返回”,为什么会这样。

def NewtonSqrt(x):

  def improve(guess):
    return (guess + (x/guess)) / 2

  def goodenough(guess):
    if abs(guess - (x/guess)) < 0.00001:
      return True

  def tryfor(guess):
    if goodenough(guess) == True:
      print(guess)
      return guess
    else:
      tryfor(improve(guess))

  return tryfor(1)

print(NewtonSqrt(2))

1 个答案:

答案 0 :(得分:0)

除了优化的可能性外,代码还有两个问题。第一个是如果使用浮点数,则应尊重变量类型。使用

return (guess + (x/guess)) / 2.

代替

return (guess + (x/guess)) / 2

第二个是递归。 tryfor函数必须以return结尾:

  def NewtonSqrt(x):

      def improve(guess):
        return (guess + (x/guess)) / 2.

      def goodenough(guess):
        if abs(guess - (x/guess)) < 0.00001:
          return True

      def tryfor(guess):
        if goodenough(guess) == True:
          #print(guess)
          return guess
        else:
          return tryfor(improve(guess))

      return tryfor(1)

print(NewtonSqrt(2))

现在输出将与None不同。我希望你觉得它有用!