팩토리얼 계산을 코드로 구현해보자.
//팩토리얼 함수만들어 보기
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)
}