Chúng ta cần viết hàm nhận vào số và tính căn bậc hai không dùng Math.sqrt().
Ví dụ
Dưới đây là đoạn code:
const square = (n, i, j) => {
let mid = (i + j) / 2;
let mul = mid * mid;
if ((mul === n) || (Math.abs(mul - n) < 0.00001)){
return mid;
}else if (mul < n){
return square(n, mid, j);
}else{
return square(n, i, mid);
}
}
// Hàm tìm căn bậc hai của n
const findSqrt = num => {
let i = 1;
const found = false;
while (!found){
// Nếu n là số chính phương
if (i * i === num){
return i;
}else if (i * i > num){
let res = square(num, i - 1, i);
return res;
};
i++;
}
}
console.log(findSqrt(33));Kết quả
Đoạn code sẽ in ra console:
5.744562149047852
Giải thích code
Lặp từ i = 1.
Nếu i * i = n, trả về i vì n là số chính phương. Ngược lại tìm i nhỏ nhất sao cho i * i > n.
Khi đó căn bậc hai nằm trong khoảng (i-1, i). Dùng thuật toán tìm kiếm nhị phân (Binary Search) để tìm căn bậc hai chính xác.