빠똥빠똥
10872번 팩토리얼(EAX, 스택프레임) - ☆ 본문
#문제링크 : https://www.acmicpc.net/problem/10872
<전략>
1. 반복문으로 간단히 풀 수 있지만, 재귀호출로 풀었다. 재귀를 사용하게 되면 호출량이 급속도로 증가하기 때문에 시간초과가 날 수 있다. 따라서, 중간중간 이미 계산된 fact(i)을 메모이제이션을 통해 저장해두어야 불필요한 호출을 안할 수 있다.
※주의사항
1. else문에 return값을 넣어주지 않아도 답은 잘나온다. 왜일까? 답은 잘 나오지만, 런타임에러가 뜬다.
2. EAX레지스터는 최근 연산된 값을 저장해놓는다. 또한, 연산 전용 레지스터라 연산이 수행되면 EAX레지스터에서 연산이 수행되고 저장된다.
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 |