JavaScript에서 가장 빠른 팩토리얼 프로그램
계승 계획은 주어진 숫자의 인수를 찾는 데 사용됩니다. 예를 들어, 숫자 8의 인수는 1, 2, 4, 8입니다. 숫자 0과 1의 인수는 항상 1입니다. 마찬가지로 모든 숫자에는 일부 계승 수가 있습니다.
JavaScript에서 계승 프로그램을 작성하는 방법에는 두 가지가 있습니다. 하나는 재귀를 사용하는 것이고 다른 하나는 반복을 사용하는 것입니다. for()
루프를 사용하여 이 두 프로그램을 모두 1000번 호출하고 이 프로그램을 호출할 때마다 숫자 1000의 계승을 찾습니다.
두 가지 방법을 자세히 살펴보고 나중에 어떤 것이 가장 빠른 계승 프로그램인지 알아보겠습니다.
JavaScript에서 재귀를 사용하는 팩토리얼 프로그램
재귀적 방법은 계승 프로그램을 작성하는 한 가지 방법입니다. 재귀에서 우리는 몇 가지 기본 조건으로 동일한 함수를 계속해서 호출합니다. 기본 조건은 무한 루프에 빠지지 않도록 합니다.
재귀 프로그램을 실행하는 데 걸리는 시간을 확인하기 위해 Date
객체의 getItem()
메서드를 사용합니다. start
변수는 프로그램이 실행을 시작하는 시간을 저장하고 end
는 프로그램이 실행을 완료한 시간을 저장합니다.
아시다시피 숫자 0의 계승은 1
입니다. 따라서 이것을 기본 조건으로 설정하고 숫자가 0이 되자마자 1
을 반환합니다. 그렇지 않으면 0
에 도달할 때까지 동일한 계승 함수를 계속해서 호출하여 해당 숫자의 계승을 계속 찾을 것입니다. 재귀를 이용한 계승 프로그램의 구현은 아래와 같다.
let start, end;
start = new Date().getTime();
for (var i = 0; i < 10000; i++)
recursionFactorial(1000)
function recursionFactorial(num){
if (num === 0)
return 1;
else
return num * recursionFactorial( num - 1 );
}
end = new Date().getTime();
console.log(end);
출력:
1627808767415
위에 표시된 출력은 재귀 프로그램이 실행을 완료한 시간이며 end
변수에도 저장됩니다. 시간은 밀리초 단위이며 브라우저의 콘솔 창에 인쇄됩니다.
JavaScript에서 반복을 사용하는 팩토리얼 프로그램
계승 프로그램을 작성하는 또 다른 방법은 반복을 사용하는 것입니다. 반복에서 for
, while
또는 do-while
루프와 같은 루프를 사용합니다.
여기에서도 Date
객체의 getItem()
메소드를 사용하여 반복 프로그램을 실행하는 데 걸리는 시간을 확인할 것입니다. start2
변수는 프로그램이 실행을 시작하는 시간을 저장하고 end2
는 반복 프로그램이 실행을 완료하는 시간을 저장합니다.
iterationFactorial()
함수에서 처음에 카운터를 1
로 설정한 다음 for 루프를 사용하여 counter
변수를 증가시켜 요소를 찾습니다. 결국 counter
변수의 값을 반환합니다.
let start2, end2;
start2 = new Date().getTime();
for (var i = 0; i < 10000; i++)
iterationFactorial(1000);
function iterationFactorial(num){
var counter = 1;
for (var i = 2; i <= num; i++)
counter = counter * i;
return counter;
}
end2 = new Date().getTime();
console.log(end2);
출력:
1627808727136
위에 표시된 출력은 프로그램이 반복 프로그램을 종료한 시간이며 end2
변수에도 저장됩니다. 시간은 밀리초 단위이며 브라우저의 콘솔 창에 인쇄됩니다.
JavaScript에서 가장 빠른 팩토리얼 프로그램
이제 우리는 숫자의 계승을 찾는 재귀 및 반복 프로그램을 모두 보았습니다. 이제 최종 결과(이 두 프로그램을 모두 실행하는 데 걸리는 시간)를 확인하여 이 두 가지 요인 프로그램 중 어느 것이 더 빠른지 확인하겠습니다.
재귀 프로그램의 시작 및 종료 시간은 start
및 end
변수에, 반복 프로그램의 시간은 start2
및 end2
변수에 이미 저장되어 있습니다. 이제 시작 시간에서 종료 시간을 빼서 결과 시간을 밀리초 단위로 얻어야 합니다.
let res1 = end - start;
let res2 = end2 - start2;
console.log("res1: " + res1 + " res2: " + res2 )
출력:
res1: 1626 res2: 27
최종 결과는 재귀 프로그램이 반복 프로그램보다 훨씬 더 많은 시간이 걸린다는 것을 보여줍니다. 따라서 JavaScript에서는 iteration factorial 프로그램이 가장 빠릅니다. 이 출력은 이 프로그램을 실행할 시스템에 따라 다를 수 있습니다.