2

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));
4

1 に答える 1

5

return再帰ステップでa が欠落しているようです。

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

http://jsfiddle.net/mattball/TyLsL

于 2013-03-07T05:35:42.863 に答える