Javascript 为什么这个递归函数不返回值

Javascript 为什么这个递归函数不返回值,javascript,recursion,Javascript,Recursion,我一直在跟随电子书《雄辩的Javascript》学习Javascript。在第4章中,使用递归函数访问列表的第n个值是一个挑战。我已经编写了一个递归函数来实现这一点,但即使我可以访问正确的值,由于某些令人沮丧的原因,我也无法返回它 我不确定这本书使用的列表的定义是否是通用的,所以我这里有一个解释。基本上,每个列表元素都包含一个值和下一个列表元素。这就像是某种盗梦空间。这里有一个例子 list = { value: 1, rest: { value: 2,

我一直在跟随电子书《雄辩的Javascript》学习Javascript。在第4章中,使用递归函数访问列表的第n个值是一个挑战。我已经编写了一个递归函数来实现这一点,但即使我可以访问正确的值,由于某些令人沮丧的原因,我也无法返回它

我不确定这本书使用的列表的定义是否是通用的,所以我这里有一个解释。基本上,每个列表元素都包含一个值和下一个列表元素。这就像是某种盗梦空间。这里有一个例子

list = {
    value: 1,
    rest: {
        value: 2,
        rest: {
            value 3,
            rest: null
        }
    }
}
这是我遇到问题的代码

function arrayToList(array){
  var list = {rest:null};
  for(var i = array.length-1; i>=0;i--){
    list = {
      value:array[i],
      rest:list
    }
  }
  return list;
}

/*
function nth(list, element){
  for(var i = 0;i < element;i++){
    list = list.rest;
  }
  return list.value;
}
*/

function nth(list, index){
  console.log(index);
  if(index < 1){
    console.log("Success", list.value);
    return list.value;
  }
  else {
    console.log("Fail");
    list = list.rest;
    index--;
    //console.log(index);
    nth(list,index);
  }
}

console.log(nth(arrayToList([10, 20, 30]), 1));
// → 20
函数数组列表(数组){
var list={rest:null};
对于(var i=array.length-1;i>=0;i--){
列表={
值:数组[i],
其余:列表
}
}
退货清单;
}
/*
函数n(列表,元素){
对于(变量i=0;i

注释掉的第n个函数实现了本书想要的功能,但它不是递归的。还有两个额外的
console.log()
s用于调试。如您所见,当我记录“Success”和值时,它将记录正确的值。但是,当我随后立即返回相同的值时,它返回未定义的值。

要使用递归,必须返回函数调用

return nth(list,index);

您需要从递归返回值

function nth(list, index){
  console.log(index);
  if(index < 1){
    console.log("Success", list.value);
    return list.value;
  }
  else {
    console.log("Fail");
    list = list.rest;
    index--;
    return nth(list,index);
  }
}
函数n(列表、索引){
控制台日志(索引);
如果(指数<1){
console.log(“Success”,list.value);
返回列表.value;
}
否则{
控制台日志(“失败”);
list=list.rest;
索引--;
返回第n个(列表、索引);
}
}
这样想-

初始调用I失败,因此您递归R1并失败,然后递归R2并成功


您正确地将值从R2返回到R1,但是您必须从R1返回到I,然后退出函数。

忘记返回函数值,这是我们已经回答了几十次的问题。由于某种原因,我没有找到重复的参考资料。除非我问,否则我怎么知道这是我的问题?如果我不知道问题是什么,我就找不到问题的答案。请原谅我的无知,但我不明白。我尝试了以下两种方法,但都没有成功。函数n(list,index){if(index<1){return n(list,index);}else{list=list.rest;index--;return n(list,index);}}}函数n(list,index){if(index==0){return n(list,index);}else{index--;list=list.rest;}这实际上是有意义的,让我试试。我一定要再看看这个。这简直是在折磨我的大脑。谢谢你的帮助!