【发布时间】:2018-06-28 15:27:17
【问题描述】:
谁能解释一下这个递归函数是如何工作的。我不明白这些值是如何在调用堆栈中返回的。您能否用一些代表执行上下文的图形进行解释。如果你能解释一下 Udemy 课程 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(13));
【问题讨论】:
-
您可以查看此视频,确切时间有动画youtu.be/8aGhZQkoFbQ?t=326
-
理解递归的一个关键是:它并不特别。如果您了解
function three() { return one(two()); }的工作原理,那么您就会了解function recurse(val) { return val == 0 ? 0 : 1 + recurse(val - 1); }的工作原理。 -
如果您在理解递归时遇到困难(这完全可以理解!)我建议从一个更简单的递归函数开始,例如我上面评论中的那个,并使用您的 IDE 中内置的调试器或浏览器来单步执行,查看调用堆栈等。调试器提供了一个实时图表来说明正在发生的事情。
-
谢谢,但我想知道每次函数执行时这些值是如何返回的。
-
@AarizzzHakim:一个好的调试器会告诉你这一点。如果您使用的调试器只是马马虎虎,只需在返回之前将值分配给局部变量,您就可以看到它。
标签: javascript recursion return