Javascript 参数作为递归中的存储-使用从startNum到endNum的所有值的递归返回数组

Javascript 参数作为递归中的存储-使用从startNum到endNum的所有值的递归返回数组,javascript,arrays,function,recursion,Javascript,Arrays,Function,Recursion,在学习递归的过程中,我遇到了这个问题,我已经解决了它,但不是以我想要的方式。在我的解决方案中,我将值存储在全局范围中声明的数组中 这是我的密码: //我不希望数组在全局范围内,而是在函数内 让数组=[]; 常数rangeOfNumbers=startNum,endNum=>{ 如果startNum==endNum{ array.0,0,startNum; 返回数组; } { array.0,0,endNum; //console.logarray const newEndNum=endNum-

在学习递归的过程中,我遇到了这个问题,我已经解决了它,但不是以我想要的方式。在我的解决方案中,我将值存储在全局范围中声明的数组中

这是我的密码:

//我不希望数组在全局范围内,而是在函数内 让数组=[]; 常数rangeOfNumbers=startNum,endNum=>{ 如果startNum==endNum{ array.0,0,startNum; 返回数组; } { array.0,0,endNum; //console.logarray const newEndNum=endNum-1; endNum=newEndNum; 返回numbersStartNum、endNum的范围; } } console.lograngeOfNumbers6、10检查开始数和结束数是否相等。如果他们返回[startNum]。如果不是,则返回[startNum]并将调用rangeOfNumbers的结果与startNum递增1:

常数rangeOfNumbers=startNum,endNum=> startNum==endNum? [斯塔特南] : [startNum].concatrangeOfNumbersstartNum+1,endNum;
console.lograngeOfNumbers6,10这会将数组移动到函数内部,首次调用时只需声明一个空数组

常量rangeOfNumbers=startNum、endNum、array=>{ 如果startNum==endNum{ array.0,0,startNum; 返回数组; } array.0,0,endNum; //console.logarray const newEndNum=endNum-1; endNum=newEndNum; 返回numbersStartNum、endNum、数组的范围; }
console.LogRangeofNumber 6,10,[] 这在很大程度上与Ori Drori的答案相同——第一个,功能性的答案,而不是野蛮的命令式答案:——但有一个更简单的基本情况,使用扩展运算符代替concat,并通过倒计时结束而不是倒计时开始。我想,在这一点上,它实际上根本不是相同的功能,但它在精神上仍然感觉非常相似

常数rangeOfNumber=开始,结束=> 开始>结束 ? [] :[…数字范围开始,结束-1,结束]
log rangeof numbers 3,12您的问题询问如何使用参数作为存储,本例希望展示这种技术-

如果a大于b,则已达到基本情况。返回结果,r 电感a小于或等于b。将a附加到结果,并重复子问题a+1,b 常数范围=a、b、r=[]=> a>b ? r//1 :范围a+1,b,[…r,a]//2 console.logJSON.stringifyrange0,7/[0,1,2,3,4,5,6,7] console.logJSON.stringifyrange3,9/[3,4,5,6,7,8,9]
console.logJSON.stringifyrange9,3/[]lol-不是野蛮的命令式lol:-。是的-我写这篇文章的时候觉得很脏。我已经开始谈论通过指出我们不是野蛮人来避免突变。顺便问一下-哪种方法会喜欢尾部调用优化?@OriDori我在我的帖子中提供了一个尾部递归形式:DYeah,我没有麻烦,但它很简单,而且尾部递归可以引导!