2013-03-07 89 views
2

我決定嘗試通過麻省理工學院SICP課程,但使用Javascript。卡住SICP練習1.1.7使用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)); 

回答

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

+0

衛生署,我知道這將是愚蠢的東西。謝謝你,馬特。 – 2013-03-07 05:53:40