CS/SICP in JS

연습문제 1.31

띵킹 2023. 2. 18. 14:25

 

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