화면구현/HTML

함수리턴

psys 2020. 6. 25. 12:32
728x90

함수속에서 함수 리턴

<meta charset="UTF-8">
<script>
    function f_cal(p_op) {
        if (p_op == "+") {
            return function (p_arg1, p_arg2) {
                return p_arg1 + p_arg2;
            }
        } else if (p_op == "-") {
            return function (p_arg1, p_arg2) {
                return p_arg1 - p_arg2;
            }
        } else if (p_op == "*") {
            return function (p_arg1, p_arg2) {
                return p_arg1 * p_arg2;
            }
        } else if (p_op == "/") {
            return function (p_arg1, p_arg2) {
                return p_arg1 / p_arg2;
            }
        } else if (p_op == "%") {
            return function (p_arg1, p_arg2) {
                return p_arg1 % p_arg2;
            }
        } else {
            alert("다시");
        }
    }
    alert("8 + 3 = "+f_cal("+")(8, 3)+"\n8 - 3 = "+f_cal("-")(8, 3)
            +"\n8 X 3 = "+f_cal("*")(8, 3)+"\n8 / 3 = "+f_cal("/")(8, 3)
            +"\n8 % 3 = "+f_cal("%")(8, 3)+"\n");
</script>

 

ex>

2일차부터는 매일 자가복제

<meta charset="UTF-8">
<script>
    /* 재귀호출 문제   
       기본룰  하루가 지나면 자가복제기능 매일 작동
       기간            터미네이터 숫자
         0일           A
         1일           A
         2일           A A1
         3일           A A2 A1
         4일           A A3 A2 A1 A11
         5일           A A4   A1 A12  A11 A2  A21   A3
         문제 날짜를 매개변수로 넘기면  그 날짜의 터미네이터 숫자를 리턴하는
         함수를 재귀호출을 이용하여 만들어주세요
    */
    var cnt=0;
    function f_re(day) {
        if (day == 0 || day == 1) {
            return day;
        }
        return f_re(day-1)+ f_re(day - 2);
    }
    alert("day0: "+f_re(1)
    +"마리\nday1: "+f_re(2)
    +"마리\nday2: "+f_re(3)
    +"마리\nday3: "+f_re(4)
    +"마리\nday4: "+f_re(5)
    +"마리\nday5: "+f_re(6)
    +"마리");
</script>


>> 강사님 코드

더보기
<meta charset="UTF-8">
<script>
    /* 재귀호출 문제   
       기본룰  하루가 지나면 자가복제기능 매일 작동
       기간            터미네이터 숫자                           정리
         0일           A                                        1마리
         1일           A                                        1마리
         2일           A A1                                     2마리
         3일           A A2 A1                                  3마리
         4일           A A3 A2 A1 A11                           5마리
         5일           A A4   A1 A12  A11 A2  A21   A3          8마리
         문제 날짜를 매개변수로 넘기면  그 날짜의 터미네이터 숫자를 리턴하는
         함수를 재귀호출을 이용하여 만들어주세요

         아주 유명한 문젱!(힌트: 수열문제, 피보나치 수열)
        세번째부터 N = (N-1) + (N-2) 규칙이 보임, N=0,N=1 일때는 그냥 1
         요거 풀고 오늘 중요한 거 많이 했으니 한번 정리해 봅니다.
    */
    function f_pibo(p_day){
        // 재귀 호출로 작성, 재귀호출은 종료조건이 중요합니다, 잘못하면 무한루핑
        if(p_day == 0 || p_day ==1) return 1;
        return f_pibo(p_day-1) + f_pibo(p_day-2);
    }
    // 검증
    for(var a_day = 0; a_day <=10; a_day++){
        alert(a_day + "일차 :" + f_pibo(a_day) + "마리");
    }
    

</script>

'화면구현 > HTML' 카테고리의 다른 글

다양한요소등록법  (0) 2020.07.02
화면색상변경  (0) 2020.07.02
재귀호출  (0) 2020.06.25
중복체크  (0) 2020.06.25
[JavaScript] Random  (0) 2020.06.24