小编fiz*_*zis的帖子

JavaScript递归:超出最大调用堆栈大小

我有一个递归功能,可以在画布上移动一些圆圈.被遮挡的圆圈被放大(放大),所有其他圆圈被推开.推动圆圈推动其他圆圈,依此类推,直到缩放完成.

我得到一个错误"超出最大调用堆栈大小",我理解这个问题,但我只是不知道如何解决它...我找到了三种解决递归问题的可能解决方案:

  1. 将递归更改为迭代
  2. 使用memoization
  3. 使用SetTimeout

但我认为我不能使用它们:

  1. 由于所需的操作数量未知,我无法实现迭代
  2. 我不太了解memoization,但我认为它也不适合(或者我错了,有人可能会告诉我不同​​的?)
  3. 我不能使用SetTimeout,因为它应该阻止此特定动画的函数调用.

我该如何解决这个问题?

// Pushes circles aside when some other circle leans on these circles (on zoom in)
var moveCirclesAside = function(circle1, circleToSkip, groupOfMoves) {
    var count = circles.length;
    for (var i = 0; i < count; i++) {

        // Skip the same circle
        if (i == circle1.i) {
            continue;
        }

        // Also skip the circle which was intended not to move any further
        if (circleToSkip != null && i == circleToSkip.i) …
Run Code Online (Sandbox Code Playgroud)

javascript recursion

11
推荐指数
3
解决办法
2万
查看次数

标签 统计

javascript ×1

recursion ×1