재귀함수

이진욱(JIN WOOK)·2024년 12월 1일
0

팩토리얼 계산을 코드로 구현해보자.

//팩토리얼 함수만들어 보기
var result = 1
@MainActor func factorial(number: Int) -> Int {
    result = number
    for i in 1..<number {
        result *= i
    }
    return result
}

factorial(number: 4)

하지만 우리는 재귀함수를 통해 구현 가능하다.

재귀함수란?

자기자신을 반복해서 호출하는 함수

func factorialF(num: Int) -> Int {
    return num * factorialF(num: num-1)
}

이런식이다.

함수도 결국 Int형을 반환하니, 단순하게 파라미터의 전달값에서 1씩 빼줘 전달한다.
하지만 치명적인 오류가 존재한다.
이렇게 놔두면 계속 함수를 호출해서 스택오버플로우 현상이 일어남.
(스택영역의 메모리 용량을 넘어선 프로그래밍으로 인해 생기는 오류)

위 코드에서 7이 전달되었다고 생각해보자
7,6,5,4,.. 계속 줄어 음수까지 실행된다.

종료 조건이 필요하다.

func factorialF(num: Int) -> Int {
		if num <= 1 { //1보다 작거나 큰경우 종료
		return 1
		}
    return num * factorialF(num: num-1)
}

재귀함수를 사용할때는 항상 Stack-OverFlow현상을 염두해두자

profile
기술로부터 소외 되는 사람이 없도록 우리 모두를 위한 서비스를 만들고 싶습니다.

0개의 댓글

관련 채용 정보