저는 자바 스크립트를 처음 접했고 친구를위한 특별한 교대 스케줄 코드를 작성하려고했습니다. 가 현재 작동하는 방법은 다음과 같다 : 트리 워킹을위한 재귀를 피할 수있는 최적의 방법
function walk(currentDay) {
var today = allWorkDays[currentDay]; // An array of all workdays we need to schedule
var vertices = fetchCombinationsForToday(today); // Fetch an array of 0 length or more
// containing possibilities for the day
// according to rules set by user
for (var i=0; i<vertices.length; i++) {
[we add the vertices[i] to a running array]
walk(currentDay+1);
}
if (currentDay == sumOfAllDays) { // We are at a leaf
analyzeSchedule(); // This will keep a copy of the current schedule
// if it has a higher score than X
}
[some business to pop the last node/day we added to our global array]
}
지금 코멘트에 지정된 규칙은 일반적으로 지난 5-10 마지막으로 추가 된 요소 (일)을 분석하고 오늘의 변화가 될 수있는 것을 돌려 규칙입니다.
내가 여기에있는 문제는 프로그램이 1000 일 이상의 배열에도 일정을 찾아 낼 수 있도록하려는 것이지만 재귀 때문에 함수 호출 제한을 초과합니다. 자바 스크립트에서 재귀를 사용하지 않고 트리를 걷는 방법이 있습니까? 대부분의 경우 재귀에 의해 해결할 수있는 문제는 루프에 의해 해결 될 수 있으며 반대의 경우에도 반복 문제로 해결할 수있는 문제가 있음을 알 수는 있습니다.
트리의 초기에는 정점 배열이 큼 (20-30 개 요소)이지만 빠르게 작아집니다 (0-5 요소). 나는이 코드를 결코 실행하지 않았다. [EDIT : "도달 한 함수 호출 한도"오류] 모든 이론이긴하지만 [편집 : 사실은 내가 도달 할 것이다].
코드를 실행하고 디버깅하고 코드를 다시 작성하고 구조를 작성하여 생각해보십시오. 진지하게 코드를 실행해야합니다. 의사 코드는 좋지만 해결책을 찾지 못할 것이며 우리는 해결책을 제공하지 않을 것입니다. –
@ EvilP i concur, 그리고 나는 또한 TDD를 사용하는 초기의 소리처럼이 소리를 추가 할 것입니다. 당신은 모든 것을 설명하고 행동을 검증하기를 원합니다. 선택한 js 단위 테스트 프레임 워크를 선택하고 코딩을 시작하십시오. 좀 더 구체적인 implentation 문제가 발생하면 그 질문을 할 수도 있습니다. –
미안하지만, 의사 코드는 나에게 (그리고 다른 사람들이) 대안을 제안하기에 충분할 정도로 문제를 이해하기 위해 당신이하려는 일에 대한 설명으로는 충분하지 않습니다. – jfriend00