var arr = [] function fn(n) { if (n == 1) { return arr.push(n); }else { return arr.push(fn(n-1)) } } fn(100) console.log(arr)返回值为什么不是1-100
时间: 2024-02-10 11:05:09 浏览: 29
这是因为在代码中,`fn(n-1)` 的返回值是一个数组,而非数字。因此,每次调用 `fn()` 函数时,都会将一个包含数字的数组 `push` 到 `arr` 数组中,而不是单独的数字。因此,最后 `arr` 数组中的元素都是包含数字的数组,而非单独的数字。正确的代码应该是这样的:
```
var arr = []
function fn(n) {
if (n == 1) {
arr.push(n);
} else {
fn(n-1); // 递归调用
arr.push(n);
}
}
fn(100);
console.log(arr); // [1, 2, 3, ..., 100]
```
在这个代码中,我们将 `fn(n-1)` 的返回值改为了递归调用 `fn()` 函数,这样就可以将数字按照从小到大的顺序添加到 `arr` 数组中了。
相关问题
var arr1 = [1, 2, 3] var arr2 = arr1.push(4) var arr3 = function(arr) { return function() { return arr.toString() } } var arr4 = arr3(arr1) arr1 = arr1.concat(5, 6) var arr5 = arr4() // 请说出 arr1 arr2 arr3 arr4 arr5的值分别是多少
- `arr1` 的值为 `[1, 2, 3, 4, 5, 6]`,因为 `arr1.push(4)` 的返回值是新数组的长度,`arr1` 本身变成了 `[1, 2, 3, 4]`,接着用 `concat` 方法将新元素 `[5, 6]` 添加到 `arr1` 的末尾。
- `arr2` 的值为 `4`,因为 `arr1.push(4)` 的返回值是新数组的长度。
- `arr3` 是一个函数,它返回一个函数。这个函数的作用是将传入的数组转成字符串并返回。
- `arr4` 的值为一个函数,这个函数可以将 `arr1` 数组转成字符串并返回。
- `arr5` 的值为 `'1,2,3,4'`,因为 `arr4()` 返回的是 `arr1` 数组的字符串形式,此时 `arr1` 的值为 `[1, 2, 3, 4, 5, 6]`,所以 `arr5` 的值为 `'1,2,3,4'`。
function fn1(arr) { var min = arr[1] var left = [] var right = [] for (var i = 1; i < arr.length; i++) { min > arr[i] ? left.push(arr[i]) : right.push(arr[i]) } return
这段代码的作用是将数组 `arr` 中小于等于 `min` 的元素放入 `left` 数组中,大于 `min` 的元素放入 `right` 数组中。然后返回这两个数组。
但是这段代码存在一些问题,首先是 `min` 的初始值应该是 `arr[0]` 而不是 `arr[1]`,因为数组下标是从 0 开始的。其次,代码缺少了返回值,应该在最后加上 `return [left, right]`,这样才能正确返回结果。
下面是正确的代码:
```
function fn1(arr) {
var min = arr[0];
var left = [];
var right = [];
for (var i = 0; i < arr.length; i++) {
min > arr[i] ? left.push(arr[i]) : right.push(arr[i]);
}
return [left, right];
}
```