标签:console 递归 unshift JS 数组 push countArray
《一》使用递归函数时,用push给数组增加新值:
注:
FIFO先进先出:push+pop或者unshift+shift。
LIFO后进先出:push+shift或者unshift+pop。
一般使用递归是用来代替for循环。
function countup(n) { if (n < 1) { return []; } else { console.log('递归前n的值:'+n); let countArray = countup(n - 1); console.log('递归后n的值:'+n); console.log('递归后数组的值:'+countArray); countArray.push(n);//push返回值为新的数组长度 console.log('push后数组的值:'+countArray); return countArray; } } //测试: console.log(countup(5));//控制台输出[ 1, 2, 3, 4, 5 ]
console输出如下:
递归前n的值:5 递归前n的值:4 递归前n的值:3 递归前n的值:2 递归前n的值:1 递归后n的值:1 递归后数组的值: push后数组的值:1 递归后n的值:2 递归后数组的值:1 push后数组的值:1,2 递归后n的值:3 递归后数组的值:1,2 push后数组的值:1,2,3 递归后n的值:4 递归后数组的值:1,2,3 push后数组的值:1,2,3,4 递归后n的值:5 递归后数组的值:1,2,3,4 push后数组的值:1,2,3,4,5 [ 1, 2, 3, 4, 5 ]
解释:
At first, this seems counterintuitive since the value of n
decreases, but the values in the final array are increasing. This happens because the push happens last, after the recursive call has returned. At the point where n
is pushed into the array, countup(n - 1)
has already been evaluated and returned [1, 2, ..., n - 1]
.
起初,这似乎违反直觉,因为n的值减少,但最终数组中的值增加。发生这种情况是因为推送发生在递归调用返回之后。在n被推入数组的点,已经计算并返回了countup(n-1)[1,2,…,n-1]。
《二》使用递归函数时,用unshift给数组增加新值:
function countdown(n){ if (n<1) { return []; } else { console.log('递归前n的值:'+n); let countArray=countdown(n-1); console.log('递归后n的值:'+n); console.log('递归后数组的值:'+countArray); countArray.unshift(n);//unshift返回值为新的数组长度 console.log('unshift后数组的值:'+countArray); return countArray; } } //测试: console.log(countdown(5));//控制台输出:[ 5, 4, 3, 2, 1 ]
console输出如下:
递归前n的值:5 递归前n的值:4 递归前n的值:3 递归前n的值:2 递归前n的值:1 递归后n的值:1 递归后数组的值: unshift后数组的值:1 递归后n的值:2 递归后数组的值:1 unshift后数组的值:2,1 递归后n的值:3 递归后数组的值:2,1 unshift后数组的值:3,2,1 递归后n的值:4 递归后数组的值:3,2,1 unshift后数组的值:4,3,2,1 递归后n的值:5 递归后数组的值:4,3,2,1 unshift后数组的值:5,4,3,2,1 [ 5, 4, 3, 2, 1 ]
以上两种情况的代码,都使用了递归函数,但除了push和unshift不一样,其他都一模一样,但前者得到的数组结果是正序,后者数组结果是倒序。
标签:console,递归,unshift,JS,数组,push,countArray 来源: https://www.cnblogs.com/168-h/p/16683808.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。