자바스크립트 재귀함수 예제

자바 스크립트에서 프로그래밍하는 동안 재귀 함수에 대한 참조를 접했을 수 있습니다. 몇 가지 자신을 구성 (또는 해체)하려고 할 수도 있습니다. 그러나 당신은 아마 야생에서 효과적인 재귀의 많은 예를 본 적이 없습니다. 사실, 이 접근법의 이국적인 특성 이외에는 재귀가 유용할 때와 위치, 또는 부주의하게 사용하면 얼마나 위험할 수 있는지 를 고려하지 않았을 수 있습니다. 재귀 함수는 자체를 호출하는 함수입니다. 우리는 데모에 대한 고전적인 요소 기능을 취할 것입니다. 함수가 중첩 된 호출을 할 때 다음과 같은 일이 발생합니다. 그것은 당신에 게 의미가 없는 경우 괜찮아요. 중요한 부분은 라인 4에서 일어나고있다 : 반환 x * 요인 (x – 1);. 보시다시피 함수는 실제로 자체를 다시 호출합니다 (factorial (x-1))) 처음 호출 되었을 때보다 하나 적은 매개 변수가 있습니다.

이렇게 하면 재귀 함수가 됩니다. 1. 숫자의 계수를 계산하기 위해 자바 스크립트 프로그램을 작성합니다. 편집기로 이동 수학, n!로 표시된 비음수 정수 n의 요인은 n 이하 또는 같은 모든 양정수의 곱입니다. 예를 들어, 5! = 5 x 4 x 3 x 2 x 1 = 120 함수가 작업을 해결할 때 솔루션을 보려면 나를 클릭하고 그 과정에서 다른 많은 함수를 호출 할 수 있습니다. 이 것의 부분적인 경우는 함수가 자신을 호출하는 경우입니다. 이를 재귀라고 합니다. asyncSerial에 대한 인수는 args라는 배열로 강제 변환됩니다. 다음 호출 될 때 함수는 함수가 될 args의 첫 번째 요소를 이동합니다. 그런 다음 함수를 인수로 호출합니다. 다음은 funtion 내부에 정의 된 콜백 내부에 호출됩니다. 이 작업을 참조하십시오.

우리는 자바 스크립트가 우리가 인수로 함수를 가지고 함수를 작성할 수 있습니다 알고있다. 따라서 우리가 쓰고 있는 실제 함수를 사용하고 실행의 맥락에서 실행하려면 어떻게 해야 할까요? 이제 우리는 여전히 우리의 요인 예제가 어떻게 작동하는지 알지 못하지만 이상적으로는 더 합리적입니다 : 더 나은 이해를 위해 어떤 경우에는 배열에 대한 더 나은 대안이 될 수있는 „링크 된 목록”이라는 또 다른 재귀 구조를 다룰 것입니다. … 그러나 경우에 따라 재작성은 사소한 것이 아니라, 특히 함수가 조건에 따라 다른 재귀 하위 호출을 사용하고 결과를 병합하거나 분기가 더 복잡할 때 입니다. 그리고 최적화는 필요하지 않을 수 있으며 노력할 만한 가치가 없습니다. 루프 변형은 속도 면에서 두 번째입니다. 재귀 및 루프 변형 모두에서 동일한 숫자를 합산합니다. 그러나 재귀에는 중첩된 호출 및 실행 스택 관리가 포함됩니다. 또한 리소스가 필요하므로 속도가 느려집니다. 이 방법으로 코드를 작성하면 부작용없이 상태 비수기 방식으로 전체 프로세스를 설명 할 수 있습니다. 또한 계산을 수행하기 전에 함수에 전달되는 인수의 값을 테스트하는 방법입니다.

터미널 케이스에 도착했을 때 스스로를 호출하는 모든 함수가 신속하고 깨끗하게 종료되기를 원합니다. 이런 식으로 계산된 팩터의 경우, 터미널 케이스는 통과된 숫자가 0 또는 음수일 때 발생합니다(음수 값을 테스트하고 원하는 경우 다른 메시지를 반환할 수도 있음). 이론적으로 테일 콜 최적화는 ECMAScript 6의 표준 중 하나이며 현재 자바스크립트의 다음 버전이지만 대부분의 플랫폼에서 완전히 구현되지는 않았습니다. 이것은 작동하지만 함수형 프로그래밍 관점에서는 매우 우아하지 않습니다. 루프에 대해 이를 지원한 다음 결과를 반환하기 위해 상태를 유지하고 추적하는 몇 가지 로컬 변수를 사용해야 합니다. 우리가 루프를 위해 그것을 버릴 수 있고 보다 기능적인 자바 스크립트 접근 방식을 취할 수 있다면 더 깨끗하지 않을까요? 같은 루프의 재귀 버전은 다음과 같이 보일 수 있습니다 : 카운트 다운 함수의 정의 내에서 카운트 다운 함수를 호출하는 방법을 볼 수 있습니까? 자바 스크립트는 보스처럼 처리하고, 그냥 당신이 원하는 것을 수행합니다.

자바스크립트 재귀함수 예제