function product(term, a, next ,b){
return a > b
? 1
: term(a) * product(term, next(a), next, b);
}
function product_(term, a, next, b){
function iter(a, result) {
return a > b
? result
: iter(next(a), result * term(a));
}
return iter(a, 1);
}
function factorial(n){
function term(x){
return x;
}
return product_(term, 1, next, n);
}
sum 함수에서 덧셈을 곱셈으로 바꾸고 초기화를 0이 아닌 1로 해주면 된다.
function pi(n) {
function is_odd(i) {
return i % 2 === 1;
}
function term(i) {
return is_odd(i)
? (i + 1) / (i + 2)
: (i + 2) / (i + 1);
}
function next(i) {
return i + 1;
}
return 4 * (product_(term, 1, next, n));
}
파이의 근사값은 곱해가면서 공식을 만들어가는 과정(뒤집어서 곱하기)을 생각해보면 점화식을 도출해낼 수 있다.
728x90
'CS > SICP in JS' 카테고리의 다른 글
연습문제 1.34 (0) | 2023.02.19 |
---|---|
연습문제 1.32, 1.33 (0) | 2023.02.19 |
연습문제 1.30 (0) | 2023.02.18 |
연습문제 1.17 (0) | 2023.02.11 |
연습문제 1.16 (0) | 2023.02.11 |