Javascript 用递归逻辑转换回路

Javascript 用递归逻辑转换回路,javascript,recursion,Javascript,Recursion,我很难理解递归。如何使用递归逻辑来实现循环??这是我的。我遵循了递归的基本原理来避免无限调用,但这使得它不调用递归操作 function getArrayOf5(array,n) { var result = []; for(i = 0; i < array.length; i+= 5){ var arr = array.slice(i,n) result.push(arr) n+=5; } return result;

我很难理解递归。如何使用递归逻辑来实现循环??这是我的。我遵循了递归的基本原理来避免无限调用,但这使得它不调用递归操作

    function getArrayOf5(array,n) {
     var result = [];

     for(i = 0; i < array.length; i+= 5){
     var arr = array.slice(i,n)
     result.push(arr)
     n+=5;
  }
   return result;
}

 function recArrayOf5(array,i,n) {

  var result = [];

  //base case
  if(i > array.length) {return;}

  //action case
  result.push(array.slice(i,n));

  //recursive case
  recArrayOf5(array,i+5,n+5);

 return result;
}
函数getArrayOf5(数组,n){ var结果=[]; 对于(i=0;iarray.length){return;} //诉讼案件 结果.推(数组.切片(i,n)); //递归案例 recArrayOf5(阵列,i+5,n+5); 返回结果; } 这里是JSBin链接

尝试以下操作:

函数recArrayOf5(数组,n,结果){
if(array.length)
您的代码所做的是递归调用函数,但从不使用函数的返回值执行任何操作

为了在第一个和第二个函数之间获得相同的输出,您需要对递归调用函数的结果进行处理


我已经编辑了响应以包含Javascript代码,但无论如何我都会将PHP留在其中。

尝试这样做。我使用递归的最后一个参数作为累加器,并将结果收集到该累加器中

函数getArrayOf5(数组,n){ var结果=[]; 对于(i=0;i=array.length){返回结果;} //诉讼案件 结果.推(数组.切片(i,n)); //递归案例 返回recArrayOf5(数组,i+5,n+5,结果); } 变量数组=[1,2,3,4,5,6,7,8,9,10] log(JSON.stringify(getArrayOf5(array,5))) console.log(JSON.stringify(recArrayOf5(array,0,5,[]))//首先累加器/结果为空

//action case
result.push(array.slice(i,n));

//recursive case
recArrayOf5(array,i+5,n+5);
在第一次调用中,保存切片[]要返回结果,请调用递归调用,对结果不做任何处理,并返回在递归之前获取的切片。执行递归调用时,您希望返回调用的结果,或者让函数更改传递的其中一个值,以便每个调用的工作在调用之间传递


注意,与其他答案一样,您可以将基本情况调用设置为递归调用,重要的是它确实会终止,并且每个调用都试图完成一部分工作。

我认为您不应该更改函数签名(参数列表)。请注意,如果希望轻松调试并使代码更易于理解,则使用一致的命名和缩进非常重要

函数groupByN(arr,n){
var结果=[];
对于(i=0;i0)//请随意删除这两行
return[arr];//如果不需要剩余的项目
返回;
}
var项目=arr.slice(0,n);
剩余var=groupByNRec(arr.slice(n),n);
是否返回剩余?[项目]。混凝土(剩余):[项目];
} 
var arr=[1,2,3,4,5,6,7,8,9,10];
log(JSON.stringify(groupByN(arr,3));

log(JSON.stringify(groupByNRec(arr,3)))
请添加一些输入和输出。欢迎使用StackOverflow。请阅读并遵循帮助文档中的发布指南。适用于此处。在您发布MCVE代码并准确描述问题之前,我们无法有效地帮助您。我们应该能够将您发布的代码粘贴到文本文件中,并重现您发现的问题已抄写。n参数是什么?@hangMan-我已编辑响应,以包含答案的Javascript代码。
//action case
result.push(array.slice(i,n));

//recursive case
recArrayOf5(array,i+5,n+5);