2012-10-27 29 views
5

Tôi bị kẹt với chức năng sau xuất hiện trong một vài bài đăng khác mà tôi cũng đã xem xét.Làm rõ tính năng tìm kiếm của JavaScript Eloquent

function findSequence(goal) { 
    function find(start, history) { 
    if (start == goal) 
     return history; 
    else if (start > goal) 
     return null; 
    else 
     return find(start + 5, "(" + history + " + 5)") || 
      find(start * 3, "(" + history + " * 3)"); 
} 
    return find(1, "1"); 
} 

print(findSequence(24)); 

Cũng được cung cấp trong liên kết này.

Javascript..totally lost in this tutorial

Trong lời giải thích ở trên, câu trả lời thay vì cố gắng để thiết lập một mục tiêu 11. Họ có một sự khởi đầu của 1, đó là lần đầu tiên thử nghiệm so với 11, và sau đó một sự khởi đầu của 6 được thử nghiệm chống lại 11 .

Tôi hiểu hai bước đầu tiên này. Tuy nhiên, tôi không hiểu bước nhảy vọt từ bước thứ hai (so sánh start: 6 đến goal: 11) đến bước thứ ba (so sánh start: 3 đến goal: 11).

Làm cách nào để start chuyển từ 6 trở xuống thành 3 và sau đó sao lưu tối đa 11 (dấu đầu dòng thứ tư)?

+0

Tiếng Anh là ngôn ngữ đầu tiên của tôi. –

+0

Giải thích này trong bài đăng rất hữu ích, đó là lý do tại sao tôi đã cung cấp liên kết thay thế. – KMcA

+1

kiểm tra câu trả lời này - có thể nó có thể làm rõ. http://stackoverflow.com/questions/7540111/javascript-closure-tutorial-from-eloquent-javascript?lq=1 – c69

Trả lời

7

Ok, đây là phiên bản của mã được tăng cường với các câu lệnh nhật ký bảng điều khiển. Mở công cụ eveloper Chrome/Opera/Firefox và thực thi mã này có:

function findSequence (goal) { 
    function find (start, history, depth) { 
    depth = depth || 0; 
    console.log(Array(++depth).join('--> '), start, goal, history); 
    if (start == goal) { 
     console.warn('history'); 
     return history; 
    } else if (start > goal) { 
     console.error('null'); 
     return null; 
    } else { 
     console.info('recursion!'); 
     return find(start + 5, "(" + history + " + 5)", depth) || 
      find(start * 3, "(" + history + " * 3)", depth); 
    } 
    } 
    return find(1, "1"); 
} 

console.info(findSequence(24)); 

Bạn sẽ nhận được một dấu vết cuộc gọi của chương trình này, và hy vọng sẽ nắm bắt các khái niệm về đệ quy bằng mắt, bằng cách nhìn vào các dấu vết.

+0

Tôi đồng ý điều này sẽ giúp anh ta hiểu khái niệm nhưng theo nhận xét của anh ấy tôi muốn nói sự nhầm lẫn của anh ấy nằm trong' || '. – pedrofurla

+0

Đó là chính xác những gì tôi cần để xem và trả lời câu hỏi của tôi một cách hoàn hảo. Cảm ơn nhiều. – KMcA

+1

pedrofurla, vì vậy, vì phía bên trái cuối cùng trả về null, nó là sai và kích hoạt bên phải để bắt đầu. Chính xác? – KMcA

Các vấn đề liên quan