[英]Can someone please explain how this recursive code works?
function findSequence(goal) {
function find(start, history) {
if (start == goal)
return history;
else if (start > goal)
return null;
else
return find(start + 5, "(" + history + " + 5)") ||
find(start * 3, "(" + history + " * 3)");
}
return find(1, "1");
}
findSequence(24);
这是来自Eloquent JavaScript。 它的目的是“给定一个数字,试图找到产生该数字的加法和乘法序列”。
我已经在Chrome中运行调试器,并且在运行数字为24的函数时在start
变量上获得了该堆栈。我试图特别了解start
变量的变化。
start
= 1-加5。 start
= 6-加5。 start
= 11-加5。 start
= 16-加5。 start
= 21-加5。 start
=26。大于24。返回null。 开始返回到21。尝试乘以3。 start
=63。大于24。返回null。 开始返回到21。 正是在这一点上, start
从21变为16。这是为什么? 我在代码中看不到任何会使它降级的东西。 它重复16次,再乘以3,回到16,然后又下降到11。我真的很想知道这里发生了什么。
1
+ 5 -- 6
+ 5 -- 11
+ 5 -- 16
+ 5 -- 21
+ 5 -- 26 > 24, returns null
x 3 -- 63 > 24, returns null
x 3 -- 38
...
...
这就是正在发生的事情。 您可以更深入地进行递归。 您去的地方没有前进的脚步。 因此,您返回到当前状态之前的位置。 这就是为什么当您无法继续使用21
,递归展开并允许您从16
的另一条路。 这就是为什么start
是16
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.