在Javascript中坚持SICP练习1.1.7

时间:2013-03-07 05:31:18

标签: javascript recursion functional-programming scheme sicp

我决定尝试通过MIT SICP课程,但是在Javascript中。

以下代码输出undefined,但它应该输出相当准确的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));

1 个答案:

答案 0 :(得分:5)

您似乎在递归步骤中错过了return

var guessRoot = function(guess, x) {
    if (goodEnough(guess, x)) {
        return guess;
    } else {
        return guessRoot(improve(guess, x), x); // ... here
    }
};

http://jsfiddle.net/mattball/TyLsL