【发布时间】:2015-08-04 08:24:00
【问题描述】:
我正在使用 Eloquent Javascript,该练习要求找到一个递归解决方案,以在此表单的嵌套列表中查找第 n 个元素;
var list = {
value: 1,
rest: {
value: 2,
rest: {
value: 3,
rest: null
}
}
};
在为这个问题挠头太久之后,我正式检查了答案。
function nth(list, n) {
if (!list)
return undefined;
else if (n == 0)
return list.value;
else
return nth(list.rest, n - 1);
我可以看到这确实产生了正确的结果,但我不明白为什么。
我对逻辑的理解如下
如果没有提供列表或列表为假,则返回未定义, 否则,如果 n 为 0,则返回列表的第一个元素 - 由 list.value 给出。 否则再次调用该函数,但将 n 减 1。
显然我一定遗漏了一些东西,但我不明白这个逻辑如何返回第 n 个元素。似乎它会一直递归直到 n==0。此时它将简单地返回列表的第一个元素。
【问题讨论】:
-
您是否真的尝试过使用一个小的示例列表来运行代码?它真的像你想象的那样运行到
n == 0吗? -
注意,递归调用传递的是
list.rest,而不是整个list。
标签: javascript recursion