Algorithms/ProblemSolving2015. 5. 22. 22:02

? : factorial() 함수는 n의 값이 커지면 잘못된 결과를 반환한다. 왜그럴까? 어떤 범위의 n에 대해 올바른 결과를 출력하는가?

반환 형식이 int 이므로 

n! <= sizeof(int)

인 상황에서만 정상적으로 값을 반환할 것이다.

팩토리얼은 쉽게 결과값이 커지므로 주의해야한다.


? : 코드 1-2의 factorial2()에서 종료조건 "if (n==1) return 1;"이 없다면 어떤 일이 생길까?

재귀함수의 종료조건이 없어, 리턴을 시작하지 못해서

무한히 함수를 호출하다가 주어진 스택과 메모리를 모두 사용할 것이다. (스택 오버플로우)


같은 코드를 반복문으로도 재귀적으로도 작성할 수 있지만

factorial2() 에서처럼 재귀함수는 큰 입력에 대해 재귀호출이 계속해서 일어날 경우

함수호출시마다 차지하던 스택이 부족해질 수 있어 Stack Overflow 가 발생하게된다.

이는 Segment Fault를 유발한다.

이에 대해 컴파일러의 최적화와 관련해서는 Tail Recursion 를 참조하라.

'Algorithms > ProblemSolving' 카테고리의 다른 글

notice  (0) 2015.08.22
1.5 금액 맞추기 : problem  (0) 2015.08.22
Ch1. 재귀적 프로그래밍  (0) 2015.05.22
Reference : 문제로 풀어보는 알고리즘  (0) 2015.05.22
Posted by 레라리