Пытаюсь учить JavaScript, читаю книгу "Выразительный JavaScript", вот наткнулся на пример кода, который не могу никак разобрать.
function findSolution(target) {
function find(start, history) {
if (start == target)
return history;
else if (start > target)
return null;
else
return find(start + 5, "(" + history + " + 5)") ||
find(start * 3, "(" + history + " * 3)");
}
return find(1, "1");
}
console.log(findSolution(24));
// → (((1 * 3) + 5) * 3)
А точнее, я не могу понять, почему выполняется сначала:
find(start * 3, "(" + history + " * 3)");
А потом уже:
return find(start + 5, "(" + history + " + 5)")
Казалось, что логичнее выполнять оператор умножения первым, но вот другой код, в котором все происходит наоборот, как это понимать?
find(1, "1")
find(6, "(1 + 5)")
find(11, "((1 + 5) + 5)")
find(16, "(((1 + 5) + 5) + 5)")
too big
find(33, "(((1 + 5) + 5) * 3)")
too big
find(18, "((1 + 5) * 3)")
too big
find(3, "(1 * 3)")
find(8, "((1 * 3) + 5)")
find(13, "(((1 * 3) + 5) + 5)")
found!