Chúng tôi được yêu cầu viết một hàm JavaScript nhận một số và tính căn bậc hai của nó mà không sử dụng hàm Math.sqrt ().
Ví dụ
Sau đây là mã -
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); } } // Function to find the square root of n const findSqrt = num => { let i = 1; const found = false; while (!found){ // If n is a perfect square 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));
Đầu ra
Điều này sẽ tạo ra kết quả sau trong bảng điều khiển -
5.744562149047852
Hiểu mã
Chúng tôi đã lặp lại từ i =1.
Nếu i * i =n, thì chúng ta trả về i vì n là một bình phương hoàn hảo có căn bậc hai là i., Nếu không, chúng ta tìm i nhỏ nhất mà i * i chỉ lớn hơn n.
Bây giờ chúng ta biết căn bậc hai của n nằm trong khoảng i - 1 và i. Và sau đó chúng tôi sử dụng thuật toán Tìm kiếm nhị phân để tìm căn bậc hai.