Eloquent Javascript는 주어진 목표 숫자에 도달하기 위해 일련의 덧셈과 곱셈을 생성하는 함수를 작성하는 어려운 문제를 소개합니다. . 제공된 코드는 재귀를 사용하므로 해당 작업에 대한 의문이 제기됩니다.
findSequence 함수 내에는 중첩 함수 find가 있습니다. 이 함수는 현재 숫자에서 5를 더하거나 3을 곱하는 두 가지 가능한 변환을 재귀적으로 탐색합니다. 각 변환은 새로운 숫자를 생성하며 목표가 달성되거나 현재 숫자가 목표를 초과할 때까지 프로세스가 계속됩니다.
각 단계에서 표현식의 텍스트 표현이 전달됩니다. 예를 들어 숫자 1부터 시작하면 초기 표현은 "1"입니다. 5를 더하면 "(1 5)"가 됩니다. 함수는 이러한 표현식을 기록하여 각 숫자에 도달하기 위해 취한 단계를 추적합니다.
목표에 도달하면 마지막 단계의 표현식은 유효한 시퀀스를 나타냅니다. 그렇지 않으면 함수는 실패를 나타내는 null을 반환합니다. 여러 번의 재귀 호출이 이루어지며 유효한 시퀀스를 찾거나 모든 경로가 소진될 때까지 각각 다른 경로를 탐색합니다.
재귀를 설명하기 위해 목표 번호 14에 대한 시퀀스를 찾는 것을 고려해 보겠습니다.
(1, "1") (5, "1 + 5") (10, "(1 + 5) + 5") (15, "((1 + 5) + 5) + 5") // Discard, exceeds goal (30, "((1 + 5) + 5) * 3") // Discard, exceeds goal (15, "(1 + 5) * 3") // Discard, exceeds goal (3, "1 * 3") (8, "(1 * 3) + 5") (13, "((1 * 3) + 5) + 5") (18, "(((1 * 3) + 5) + 5) + 5") // Discard, exceeds goal (39, "(((1 * 3) + 5) + 5) * 3") // Discard, exceeds goal (24, "((1 * 3) + 5) * 3") // Discard, exceeds goal (9, "(1 * 3) * 3") (14, "((1 * 3) * 3) + 5") // Success!
이 단계적 재귀 과정을 통해 함수는 결국 "((1 3) 3) 5"라는 시퀀스를 찾습니다. 이는 1과 3의 세제곱 곱에 5를 더한 것을 나타냅니다. .
위 내용은 'FindSequence' 함수에서 재귀는 어떻게 작동합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!