var account = function(n) {
var arr = [];
if (n == 1) return 1;
if (n == 2) return 2;
if (n == 3) return 4;
if (n >= 4) {
for (let i = 4; i <= n; i++) {
account = function(i) {
return account(i - 1) + account(i - 2) + account(i - 3)
};
arr.push(account(i))
};
return arr[n - 4];
}
};
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
报错是因为没有对i进行控制,导致栈溢出:VM616:8 Uncaught RangeError: Maximum call stack size exceeded(…),你可以在这个语句上
console.log('===' + i);i 已out of control.看你的代码逻辑就是实现大于4的时候,返回值为前三个值相加的结果吧
当然,你提问的时候把想要实现什么逻辑说清楚回答者就更好回答了。不然只能猜或者通过代码看你想要的效果。
具体是什么原因,目前以我的能力说不出来,抱歉了。。。
首先,你的代码有问题,内层的account未用var定义,你这样accout函数早就变了,改成
我并不知道你的函数要做什么,但是你在这段代码里:
}
当
n>=4时,arr.push(account(i))这行代码会调用account函数,但这是account已经被更改为:这样对account的调用会反复执行这段代码。你可以在这个function里加入console.log,会发现反复输出直至报错。
account函数在i大于等于4的时候会被改变account(i)无限递归调用,函数栈溢出。我是一个新手,冒昧说下,可能不对
首先不清楚这段代码解决的是什么问题,递归调用也不知道是什么意思
var account = function(n) {
var arr = [];
if (n == 1) return 1;
if (n == 2) return 2;
if (n == 3) return 4;
if (n >= 4) {
/* for (let i = 4; i <= n; i++) {
}
};