You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

牛顿平方根近似算法无法返回结果?Python实现问题求助

问题分析与解决

嘿,我一眼就看到你踩了递归里的经典小坑——你的tryfor函数在递归调用时忘了返回结果!

咱们来拆解一下:当你的代码运行到else分支时,你调用了tryfor(improve(guess)),但这个调用的结果没有被返回给上一层函数。举个例子,当递归走到满足goodenough条件的那一步,它确实return guess了,但上层的tryfor只是执行了递归调用,却没把这个结果传递回去,所以最终整个tryfor(1)的调用就默认返回了None,这就是为什么你能看到正确的打印值,但函数返回None。

修正后的代码

只需要在递归调用前加上return就行了,另外我还顺手优化了goodenough函数的写法(原来的写法在条件不满足时会返回None,不够严谨):

def NewtonSqrt(x):
    def improve(guess):
        return (guess + (x/guess)) / 2
    def goodenough(guess):
        # 直接返回布尔表达式,明确返回True/False
        return abs(guess - (x/guess)) < 0.00001
    def tryfor(guess):
        if goodenough(guess):
            print(guess)
            return guess
        else:
            # 关键:把递归调用的结果返回出去
            return tryfor(improve(guess))
    return tryfor(1)

print(NewtonSqrt(2))

为什么这样改?

递归函数的每一层都需要把结果传递回上一层,当你在else里写return tryfor(improve(guess))时,相当于告诉当前的tryfor函数:“我要把递归调用得到的结果作为我自己的返回值”。这样层层传递,最开始的tryfor(1)就能拿到最终的近似值,再由NewtonSqrt返回给调用者。

内容的提问来源于stack exchange,提问作者Anoni Moose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:28:37