Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Tags
more
Archives
Today
Total
관리 메뉴

빠똥빠똥

10872번 팩토리얼(EAX, 스택프레임) - ☆ 본문

백준

10872번 팩토리얼(EAX, 스택프레임) - ☆

조주똥 2020. 7. 10. 23:36

#문제링크 : https://www.acmicpc.net/problem/10872

<전략>

1. 반복문으로 간단히 풀 수 있지만, 재귀호출로 풀었다. 재귀를 사용하게 되면 호출량이 급속도로 증가하기 때문에 시간초과가 날 수 있다. 따라서, 중간중간 이미 계산된 fact(i)을 메모이제이션을 통해 저장해두어야 불필요한 호출을 안할 수 있다.

Code

※주의사항

1. else문에 return값을 넣어주지 않아도 답은 잘나온다. 왜일까? 답은 잘 나오지만, 런타임에러가 뜬다.

2. EAX레지스터는 최근 연산된 값을 저장해놓는다. 또한, 연산 전용 레지스터라 연산이 수행되면 EAX레지스터에서 연산이 수행되고 저장된다.

Code

3. 위 코드를 보면 else문에 return값이 없는데도 잘 출력되는 것을 확인할 수 있다. 정확하진 않지만 아마 10+1연산을 수행하고 EAX에 가장 최근 연산인 10+1 = 11이 저장되어 있고, 연산을 수행하고 복귀주소로 돌아간 후 cout에서 fact(n)을 출력하게 되면 따로 반환값이 없으므로, EAX에 저장되어 있던 가장 최근 연산값을 가져오는 것 같다.

'백준' 카테고리의 다른 글

1002번 터렛(원) - ☆  (0) 2020.07.12
3053번 택시 기하학(M_PI, cout precision)  (0) 2020.07.12
11653번 소인수분해 - ☆  (0) 2020.07.10
2089번 -2진수 - ☆  (0) 2020.07.10
1212번 8진수 2진수  (0) 2020.07.10