【发布时间】:2013-03-20 16:26:21
【问题描述】:
这是一个来自 Eloquent Javascript 的示例:
从数字 1 开始,反复加 5 或 乘以 3,可以产生无限数量的新数字。 你将如何编写一个函数,给定一个数字,试图找到一个 产生该数字的加法和乘法序列?
我无法理解这里的递归是如何工作的,想知道是否有人可以多次写出 find 是如何被调用的或其他一些解释。
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");
}
console.log(findSequence(24)); // => (((1 * 3) + 5) * 3)
【问题讨论】:
-
注意
||- 它将递归(最多)两个路径,但只使用返回值的路径的结果(也就是说,它不不要超过目标)。不,我不会写出来(其他人也不应该,IMOHO),因为你可以写出来。它看起来像什么? -
如果要查看序列,只需使用
console.log()。这里是an example,虽然我使用了document.write。您应该使用控制台。
标签: javascript algorithm recursion