while改递归 Uncaught RangeError: Maximum call stack size exceeded
问题描述
while方法 数据多大都能通过。
但是改成递归 执行数据特别大的时候会报错:
例如:lastRemaining(70866,116922) 会报》》 Uncaught RangeError: Maximum call stack size exceeded。
请问是因为数据大 导致递归超过了最大堆栈量(堆栈溢出) ,还是递归的时候哪写错了
//while方法代码
var lastRemaining = function(n, m) {
let arr = [];
for (let i=0;i<n;i++){arr.push(i)}
let start = 0;//开始位置
while (arr.length > 1) {
start = (start + m - 1) % arr.length;
arr.splice(start, 1); // 删除元素
}
return arr[0];
};
//递归方法代码
var lastRemaining = function(n, m) {
let arr = [];
for (let i=0;i<n;i++){arr.push(i)}
let start = 0;//开始位置
(function delete_fn(){
if(arr.length > 1){
start = (start + m - 1) % arr.length;
arr.splice(start, 1); // 删除元素
delete_fn();
}
})()
return arr[0];
};
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
用递归时会遇到栈溢出的问题,所以递归并不是万能药水,避免栈溢出的问题,就可以使用while循环。