Hướng dẫn maximum call stack size exceeded recursion javascript - vượt quá kích thước ngăn xếp cuộc gọi tối đa javascript đệ quy

Tôi có một chức năng đệ quy để di chuyển một số vòng tròn trên một tấm bạt. Vòng tròn quá mức được mở rộng [phóng to] và tất cả các vòng tròn khác được đẩy ra. Các vòng tròn đẩy đẩy các vòng tròn khác và cứ thế cho đến khi thu phóng hoàn tất.

Tôi gặp lỗi "Kích thước ngăn xếp cuộc gọi tối đa vượt quá" và tôi hiểu vấn đề, nhưng tôi không biết cách giải quyết ... Tôi đã tìm thấy ba giải pháp có thể để giải quyết các vấn đề đệ quy nói chung:

  1. Thay đổi đệ quy thành Lặp lại
  2. Sử dụng ghi nhớ
  3. Sử dụng SetTimeout

Nhưng tôi nghĩ rằng tôi có thể sử dụng không ai trong số họ:

  1. Tôi không thể thực hiện lặp lại vì không xác định số lượng hoạt động cần thiết
  2. Tôi không hiểu rõ ràng về ghi nhớ, nhưng tôi nghĩ nó cũng không phù hợp [hoặc có thể tôi sai và ai đó có thể nói với tôi khác?]
  3. Tôi không thể sử dụng setTimeout, bởi vì nó nên chặn các cuộc gọi chức năng tại hoạt hình cụ thể này.

Làm sao để giải quyết vấn đề này?

// 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] {
            continue;
        }

        // Get second circle
        var circle2 = circles[i];

        // Calculate a distance between two circles
        var dx = circle2.x - circle1.x;
        var dy = circle2.y - circle1.y;
        var distance = Math.sqrt[[dx * dx] + [dy * dy]];

        // If circles already collided need to do some moving...
        if [distance 

Bài Viết Liên Quan

Chủ Đề