JavaScript 24일차

펭도리·2021년 2월 21일
0

JavaScript

목록 보기
24/32
post-thumbnail
	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-- 후 자기 자신을 다시 호출한다.

profile
풀스택 개발자가 되고싶은 코린이 이한글

0개의 댓글