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>