因此,我在Python中瞭解到了這個雙區搜索算法,我正在使用它來查找的近似數字的平方根。至於算法,它工作正常,它的侷限性,但是,這是我在的JavaScript經常做的,是封裝內的變量條件,所以它更容易閱讀,如:在循環之外保持Python條件?
var isGreaterThanFive = num > 5;
if(isGreaterThanFive && otherConditions...)
雖然在JavaScript的作品這樣做當嘗試在Python中執行此操作時,絕對沒問題,我的程序似乎進入無限循環。這是我在JavaScript代碼:
function sqrtOf (x) {
var min = 0
var max = x
var epsylon = 0.001
var guess = (max + min)/2
var guessNumber = 0;
//I created these two so it is easier to understand
var notCloseEnough = Math.abs(Math.pow(guess, 2) - x) >= epsylon;
var stillPlausible = guess <= x;
while (notCloseEnough && stillPlausible) {
guessNumber += 1
if(Math.abs(Math.pow(guess, 2)) > x) {
max = guess;
} else {
min = guess;
}
guess = (max + min)/2;
}
return guess;
}
console.log(sqrtOf(25)); // 5
在Python
現在:
def sqrtOf (x)
minVal = 0
maxVal = x
epsylon = 0.001
guess = (maxVal + minVal)/2.0
guessNumber = 0;
notCloseEnough = abs(guess ** 2 - x) >= epsylon
stillPlausible = guess <= x
while notCloseEnough and stillPlausible:
guessNumber += 1
if abs(guess ** 2) > x:
maxVal = guess
else:
minVal = guess
guess = (maxVal + minVal)/2.0
return guess
print sqrtOf(25)
當你有和賦值時,'='右邊的表達式在賦值給變量之前被求值。所以'stillPlausibe'在循環開始的時候等於'True'或'False',並且你永遠不會做任何事情來改變它。 –
你的javascript代碼有同樣的問題... – Izkata