之前童鞋遇到一个阿里的面试题,在不使用map函数的情况下怎么估算根号3的近似值,我同学没有回答上来,他把问题告诉了我,我使用了简单的二分查找法解决了这个问题
//使用二分查找法估算某个值的根号
public static double calcTest(double left, double right, double targetNum, double accuracy) {
double mid = (left + right) / 2;
//中间值小于目标值时
if (mid * mid < targetNum) {
//如果二分法精度不满足退出条件,则向右递归运算
if ((targetNum - mid * mid) >= accuracy) {
return calcTest(mid, right, targetNum, accuracy);
}
//精度满足,返回查找结果(估算值)
return mid;
//中间值大于目标值时
} else if (mid * mid > targetNum) {
//如果二分法精度不满足退出条件,则向左递归运算
if ((mid * mid - targetNum) >= accuracy) {
//递归逻辑
return calcTest(left, mid, targetNum, accuracy);
}
//精度满足,返回查找结果(估算值)
return mid;
}
//如果中间值刚好等于目标值,返回精确值
return mid;
}