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