其他分享
首页 > 其他分享> > JS使用递归后再给数组添加元素(递归与数组的结合)

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