인자먼저 계산법으로 해당하는 문제를 풀어보자..
이 경우 인자가 먼저 나와야하므로
총 4번에 걸쳐 remainder가 호출된다. (가장 마지막의 remainder는 호출되지 않는다)
정의대로 계산법은..
이전에서 if의 계산은 정의대로나 인자먼저나 모두 같다고 했으므로...
Step1:
Step2:
Step 3:
Step 4:
Step 5:
remainder의 총 누적 갯수는 1 + 2 + 4 + 7 + 4 = 18번

이 경우 인자가 먼저 나와야하므로
(gcd 206 40) -> (if (= 40 0 ) 206 (gcd 40 (remainder 206 40))) -> (gcd 40 6) ; 한번
(gcd 40 6) -> (if (= 6 0 ) 40 (gcd 6 (remainder 40 6))) -> (gcd 6 4) ; 두번
(gcd 6 4) -> (if (= 4 0 ) 6 (gcd 4 (remainder 6 4))) -> (gcd 6 4) ; 세번
(gcd 4 2) -> (if (= 2 0 ) 4 (gcd 2 (remainder 4 2))) -> (gcd 6 4) ; 네번
(gcd 2 0) -> (if (= 0 0 ) 2 (gcd 0 (remainder 2 0))) -> 2
총 4번에 걸쳐 remainder가 호출된다. (가장 마지막의 remainder는 호출되지 않는다)
정의대로 계산법은..
이전에서 if의 계산은 정의대로나 인자먼저나 모두 같다고 했으므로...
Step1:
(gcd 206 40)
=
(if (= 40 0 ) 206 (gcd 40 (remainder 206 40)))
=
(gcd 40 (remainder 206 40))
Step2:
(gcd 40 (remainder 206 40))
=
(if (= 0 (remainder 206 40)) ; (= 0 6) 한번
40
(gcd (remainder 206 40)
(remainder 40 (remainder 206 40))))
= (gcd (remainder 206 40) (remainder 40 (remainder 206 40)))
Step 3:
(gcd (remainder 206 40) (remainder 40 (remainder 206 40)))
=
(if (= 0 (remainder 40 (remainder 206 40))) ; (= 0 4) 두번
(remainder 206 40)
(gcd (remainder 40 (remainder 206 40))
(remainder (remainder 206 40) (remainder 40 (remainder 206 40)))))
= (gcd (remainder 40 (remainder 206 40))
(remainder (remainder 206 40) (remainder 40 (remainder 206 40))))
Step 4:
(gcd (remainder 40 (remainder 206 40))
(remainder (remainder 206 40) (remainder 40 (remainder 206 40))))
=
(if (= 0 (remainder (remainder 206 40) (remainder 40 (remainder 206 40)))) ; (= 0 2) 네번
(remainder 40 (remainder 206 40))
(gcd (remainder (remainder 206 40) (remainder 40 (remainder 206 40)))
(remainder (remainder 40 (remainder 206 40))
(remainder (remainder 206 40) (remainder 40 (remainder 206 40))))))
=
(gcd (remainder (remainder 206 40) (remainder 40 (remainder 206 40)))
(remainder (remainder 40 (remainder 206 40))
(remainder (remainder 206 40) (remainder 40 (remainder 206 40))))))
Step 5:
(gcd (remainder (remainder 206 40) (remainder 40 (remainder 206 40)))
(remainder (remainder 40 (remainder 206 40))
(remainder (remainder 206 40) (remainder 40 (remainder 206 40))))))
=
(if (= 0 (remainder (remainder 40 (remainder 206 40))
(remainder (remainder 206 40) (remainder 40 (remainder 206 40))))) ; (= 0 0) 일곱번
(remainder (remainder 206 40) (remainder 40 (remainder 206 40)))
(gcd (remainder (remainder 40 (remainder 206 40))
(remainder (remainder 206 40) (remainder 40 (remainder 206 40))))
(remainder (remainder (remainder 206 40) (remainder 40 (remainder 206 40)))
(remainder (remainder 40 (remainder 206 40))
(remainder (remainder 206 40) (remainder 40 (remainder 206 40)))))))
=
(remainder (remainder 206 40) (remainder 40 (remainder 206 40))) = 2 ; 네번
remainder의 총 누적 갯수는 1 + 2 + 4 + 7 + 4 = 18번

댓글 없음:
댓글 쓰기