我正在创建"Eloquent Javascript: Higher Order Functions example"的副本,因为我觉得这个问题得不到满意的答案。在以下代码中,fromMother和fromFather的实际值来自何处。我可以追溯到f指定值的位置,但为什么这些值不为零?当递归调用到达最老的一代时,母亲和父亲将被分配默认值0,对吧?那么,(0 + 0)/ 2 = 0.我知道我错过了什么,但我不确定是什么。
function reduceAncestors(person, f, defaultValue) {
function valueFor(person) {
if (person == null)
return defaultValue;
else
return f(person, valueFor(byName[person.mother]),
valueFor(byName[person.father]));
}
return valueFor(person);
}
function sharedDNA(person, fromMother, fromFather) {
if (person.name == "Pauwels van Haverbeke")
return 1;
else
return (fromMother + fromFather) / 2;
}
var ph = byName["Philibert Haverbeke"];
console.log(reduceAncestors(ph, sharedDNA, 0) / 4);
// → 0.00049