var save = [];
for(let i = 1; i <= 1000; i++) {
save.push(i);
}
// think = 구할 숫자, range = 범위
function binarySearch(think, range) {
let lowValue = 0;
let highValue = range.length-1; // save.length === 999;
let count = 0;
while(lowValue <= highValue) {
let middleValue = Math.floor((lowValue + highValue) / 2); // 499
let midData = range[middleValue];
if(midData === think) {
return midData;
} else if(midData > think) {
highValue = middleValue - 1;
} else {
lowValue = middleValue + 1;
}
count++;
console.log(`${count}. lowValue: ${lowValue}, middleValue: ${middleValue}, highValue: ${highValue}, midData: ${midData}`);
}
return undefined;
}
var result = binarySearch(11,save);
console.log(result);
내가 생각한 숫자를 정해진 범위 안에서 찾는 로직이다.
범위가 아무리 크더라도 계속해서 반으로 값을 반으로 줄이기 때문에 빠르게 내가 지정한 값을 찾을 수 있는 것이 특징이다.
재귀함수 사용
var count = 0;
var output = 0;
var funcName = [];
function functionName() {
var output = '실행순서\n';
for(var i in funcName) {
output += `${funcName[i]}\n`;
}
return console.log(output);
}
function getArea() {
circleArea(10);
Area(10,15);
trapezoid(10,15,12);
circleRise(3);
functionName();
}
function circleArea(r) {
funcName.push("circleArea");
return console.log(`원의 넓이는 = ${r * r * Math.PI}입니다.`);
}
function Area(x,y) {
funcName.push("Area");
return console.log(`사각형의 넓이는 ${x * y}입니다.`);
}
function trapezoid(x,y,h) {
funcName.push("trapezoid");
return console.log(`사다리꼴의 넓이는 ${(x+y)*h/2}입니다.`);
}
function circleRise(num) {
//재귀적인 해결책을 제시할것.
if(num <= 1) {
funcName.push("circleRise");
output += 1*1*Math.PI;
return console.log(output);
}
output += num * num * Math.PI;
num--;
circleRise(num);
}
getArea();
circleRise
함수는 처음에 num값이 3이 주어지고 내부적으로 num--
후 자기 자신을 다시 호출한다.