Javascript 需要帮助理解递归的一个例子吗
我试图理解一个用JavaScript编写的示例。实际上,我正在读《雄辩的JavaScript》,但在读一个关于递归的主题时,我被卡住了 下面是示例的说明:Javascript 需要帮助理解递归的一个例子吗,javascript,algorithm,recursion,Javascript,Algorithm,Recursion,我试图理解一个用JavaScript编写的示例。实际上,我正在读《雄辩的JavaScript》,但在读一个关于递归的主题时,我被卡住了 下面是示例的说明: function findSolution(target) { function find(current, history) { if (current == target) { return history; } else if (current > target) { return nu
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");
}
从数字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");
}
递归函数调用自身,直到分支满足不调用自身的条件 在这种情况下,当当前值等于或高于初始目标值时,链停止 但我认为当电流等于目标时,它应该返回null 通过一些额外的日志记录,可以更好地跟踪所发生的事情 在下面的代码段中,当满足11的目标时,它将以null退出。
因为结果是空的,所以它乘以3得到最终的解
函数查找解决方案(目标){
功能查找(当前、步骤、操作){
log('step:'+step'\tacon:'+action'\tcurrent:'+current');
step++;
如果(当前==目标){
log(当前+'='+target+',因此以null'退出)
返回null;
}否则如果(当前>目标){
回流;
}否则{
返回find(当前+5,步骤,'+5')| | find(当前*3,步骤,'*3');
}
}
返回find(1,0,'start');
}
console.log(findSolution(11))你的问题是什么?你具体不明白什么?您是否在调试器中对其进行了检查,或者输入了日志语句以了解发生了什么?或者用笔和纸“玩电脑”来逐步浏览代码?是的,实际上我只是想了解这个代码是如何在一张纸上手动运行的。@ASDFGerte或它一定非常流行,所以有很多人阅读它并提出问题。没有人对我写的解释提出如此多的问题,但这可能是因为我没有写过任何受欢迎的东西,而不是质量好的迹象。另一方面,阅读教科书的人仍然有问题来澄清他们的理解,这并不是对这本书的控诉;任何学习一个困难话题的人有时都需要询问他们读过的内容。“我希望作者将其视为改进的目标”,这将是一个富有成效的结果:)另一个结果是,我获得了信息,这确实是一本很受欢迎的书,并且至少有一个声音说这本书很好。