陌陌面试-算法(估算开方)

二分法:

import math
from math import sqrt


def sqrt_binary(num):
    x = sqrt(num)
    y = num / 2.0
    min = 0.0
    max = num * 1.0
    count = 1
    while abs(y - x) > 0.00000001:
        print (count, y)

        count += 1
        if (y>x):
            max = y
        else:
            min = y
        y = min+ (max - min) / 2    
    return y


print(sqrt_binary(5))
print(sqrt(5))

2.牛顿法 
在曲线上随便找一个的A点,(事先不知道根点就是解在那儿,所以随便找一个点),做一个切线,切线的根(就是和x轴的交点)与曲线的根,存在一定的距离。可以从这个切线的根出发,做一根垂线,和曲线相交于B点,继续重复刚才的工作:可以发现 

这里写图片描述

B点比之前A点更接近曲线的根点。那么经过多次迭代后会越来越接近曲线的根。 
已知曲线方程f(x),在xn点做切线,求xn+1:

 

 

这里写图片描述

 

 

def sqrt(n):
    result=1.0
    while abs(result*result-n)>0.001:
        result=(result+n/result)/2
        print(result)
    return result

print(sqrt(9))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值