递归地将对放在子列表中

时间:2015-09-09 14:29:57

标签: javascript recursion

我正在练习递归,并且我正在尝试构建一个扫描对的函数,并仅使用递归将它们放入自己的列表中(没有forEaches,循环等)。如果有一个奇数元素,你加零。这是我的代码和示例输入/输出。我唯一缺少的是如何在最后处理未定义的情况。我该如何处理?

function ownListPair(arr){

return arr.length < 2 ? [[arr[0], 0]] : [[arr[0], arr[1]]].concat(ownListPair(arr.slice(2)));

}


var arr = [2,7,8,3,1,4]
//should return [ [ 2, 7 ], [ 8, 3 ], [ 1, 4 ]]
console.log(ownListPair(arr))
//returns [ [ 2, 7 ], [ 8, 3 ], [ 1, 4 ], [ undefined, 0 ] ]
//how do I handle the undefined case? I tried a check for if the length is 1
 and got "maximum call stack exceeded"...

还尝试检查arr [0]是否与第一次长度检查一起未定义,但也调用堆栈错误。

1 个答案:

答案 0 :(得分:2)

您需要arr.length === 0的案例。您可以通过多种方式撰写本文,其中一种方法是:

&#13;
&#13;
function ownListPair(arr){
  if (arr.length === 0)
    return arr;
  else if(arr.length === 1)
    return [[arr[0], 0]];
  else 
    return [[arr[0], arr[1]]].concat(ownListPair(arr.slice(2)));
}

console.log(ownListPair([2,7,8,3,1,4]));
&#13;
<script src="http://gh-canon.github.io/stack-snippet-console/console.min.js"></script>
&#13;
&#13;
&#13;