JS使用递归后再给数组添加元素(递归与数组的结合)
作者:互联网
《一》使用递归函数时,用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