此递归代码中的空数组如何访问?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了此递归代码中的空数组如何访问?相关的知识,希望对你有一定的参考价值。

我已经看了很久很辛苦。我了解递归,了解调用堆栈和“后进先出”的概念,但是在此示例中。

function countup(n) {
  if (n < 1) {
    return [];
  } else {
    const countArray = countup(n - 1);
    countArray.push(n);
    return countArray;
  }
}
console.log(countup(5)); // [ 1, 2, 3, 4, 5 ]

当我们满足'基本条件'并且我们return [];时,如果数组没有名称,如何访问该数组?什么时候名称countArray归属于此数组?

我就是不明白!

答案

这是返回值,因此该值将传递回调用方。例如,在这一行:

const countArray = countup(n - 1)

...如果n为1,则0传递到countup,并返回[]。这意味着countArray现在具有值[]。请注意,这根本与递归无关。这就是任何函数调用的工作方式。

另一答案

return []返回的数组是函数countup返回值

[当您确实console.log(countup(5))时,您确实在做:

let something = countup(5);
console.log(something);

从函数countup返回的数组被分配给一个变量,然后通过传递给console.log将其写出到控制台。

另一答案

我不确定表达这一点的最佳方法,但是逐步执行代码的方式可能会有所帮助。这里的缩进表示递归的级别(因此是定义变量的新“范围”):

// n = 5
const countArray = countup(n - 1);
  // n = 4
  const countArray = countup(n - 1);
    // n = 3
    const countArray = countup(n - 1);
      // n = 2
      const countArray = countup(n - 1);
        // n = 1
        const countArray = countup(n - 1);
          // n = 0
          // n meets the condition (n < 1), so we return []
        // we got [], as the reutn value and assigned it to countArray
        // countArray = [] a this point
        countArray.push(n);
        // now countArray = [1]
        // return [1]
      // we got [1], as the reutn value and assigned it to countArray
      // countArray = [1] a this point
      countArray.push(n);
      // now countArray = [1, 2]
      // return [1, 2]
    // we got [1, 2], as the reutn value and assigned it to countArray
    // countArray = [1, 2] a this point
    countArray.push(n);
    // now countArray = [1, 2, 3]
    // return [1, 2, 3]
  // we got [1, 2, 3], as the reutn value and assigned it to countArray
  // countArray = [1, 2, 3] a this point
  countArray.push(n);
  // now countArray = [1, 2, 3, 4]
  // return [1, 2, 3, 4]
// we got [1, 2, 3, 4], as the reutn value and assigned it to countArray
// countArray = [1, 2, 3, 4] a this point
countArray.push(n);
// now countArray = [1, 2, 3, 4, 5]
// return [1, 2, 3, 4, 5]

// This value is then console logged

以上是关于此递归代码中的空数组如何访问?的主要内容,如果未能解决你的问题,请参考以下文章

为什么我不能在此片段中生成唯一对象数组?

片段中的 EditText 上的空指针异常 [重复]

处理 VBA 中的空单元格以进行访问

为啥此代码片段返回意外结果?

如何跳过查询条件片段中的空对象?

如何访问json中的数组元素?