我试图理解一个用JavaScript编写的示例。实际上,我正在阅读 Eloquent JavaScript 这本书,但在阅读有关递归的主题时却陷入困境。
这是该示例的语句:
从数字1开始,反复加5或 乘以3,可以生成无穷多个数字。怎么样 您会写一个给定数字的函数,试图找到一个 这种加法和乘法的顺序产生了 数字?
这是示例代码:
function findSolution(target) {
function find(current, history) {
if (current == target) {
return history;
} else if (current > target) {
return null;
} else {
return find(current + 5, `(${history} + 5)`) ||
find(current * 3, `(${history} * 3)`);
}
}
return find(1, "1");
}
答案 0 :(得分:0)
递归函数将自行调用,直到分支满足不自行调用的条件为止。
在这种情况下,当当前值等于或大于初始目标值时,链停止。
但是我认为当电流等于目标值时,它应该返回null。
使用一些额外的日志记录,可以更好地跟踪发生的情况。
在下面的代码段中,当达到目标11时,它以null退出。
并且由于结果为空,因此将其乘以3得到最终解。
function findSolution(target) {
function find(current, step, action) {
console.log('step: '+step, '\taction: '+action, '\tcurrent: '+current);
step++;
if (current == target) {
console.log(current+'='+target+' so exit with null')
return null;
} else if (current > target) {
return current;
} else {
return find(current + 5, step, '+ 5') || find(current * 3, step, '* 3');
}
}
return find(1, 0, 'start');
}
console.log(findSolution(11));