我是一名学习freeCodeCamp练习以学习JS的代码的学生。我在解释递归的一项练习中遇到了此功能。从我看来,函数应该将数字从1到n按降序排列在数组中,但是在执行时,它将数字按升序排列!为什么/如何发生? JS是否以从上到下的其他方式执行它?或者我在这里遗漏了什么?
function countup(n) {
if (n < 1) {
return [];
} else {
const countArray = countup(n - 1);
countArray.push(n);
return countArray;
}
}
console.log(countup(15));
从看代码的角度看,代码似乎是这样做的:将常量countArray定义为countup(n-1),然后将n添加为数组中的第一个元素。然后随着(n-1)的累加运行,将n-1添加为数组中的第二个元素,并且该过程不断重复。但在那种情况下,最终数组中的数字应为[n,n-1,n-2,....,3,2,1],但实际结果是该数组:[1,2,3, ...,n-2,n-1,n]。为什么/如何以这种方式发生与它应如何表现相反的行为?
答案 0 :(得分:1)
您需要考虑在递归调用期间会发生什么。也许这会有所帮助:
countup(3)
- calls countup(2)
- calls countup(1)
- calls countup(0) - this returns [] right away
- sets countArray to []
- pushes 1 onto the array <--- first number pushed
- returns [1]
- sets countArray to [1]
- pushes 2 onto the array
- returns [1,2]
- sets countArray to [1,2]
- pushes 3 onto the array
- returns [1,2,3]
如您所见,将数字实际压入数组的第一次是将其降为1,然后堆栈会展开并添加每个连续的数字。
答案 1 :(得分:0)
您可以使用javascript的排序功能对数组进行排序。
//function countup(n) {
// if (n > 1) {
// return [];
// } else {
// const countArray = countup(n - 1);
// countArray.push(n);
// return countArray;
// }
//}
//console.log(countup(15));
//Modified
const countArray = [];
function countup(n) {
if (n < 1) {
return [];
} else {
countArray.push(n);
countup(n - 1);
return countArray;
}
}
console.log(countup(15));