我决定尝试通过 MIT SICP 课程,但使用 Javascript。
以下代码输出未定义,但它应该输出 5 的平方根的相当准确的猜测。
我已经测试了所有较小的函数,它们都按预期工作,问题一定出在递归guessRoot() 函数的某个地方,但我似乎看不到问题所在。
var square = function(x) {
return x * x;
};
var abs = function(x) {
return x > 0 ? x : -x;
};
var goodEnough = function(g, x) {
return abs(square(g) - x) < 0.01;
};
var average = function(x, y) {
return (x + y) / 2;
};
var improve = function(g, x) {
return average(g, (x / g));
};
var guessRoot = function(guess, x) {
if (goodEnough(guess, x)) {
return guess;
} else {
guessRoot(improve(guess, x), x);
}
};
console.log(guessRoot(2.5, 5));