Factorial
Factorials란 어떤 정수까지의 곱을 말한다 예를 들어 3까지의 곱이라면 1X2X3 = 6이고 5까지의 곱이라면 1X2X3X4X5 = 120을 말한다.
Factoial의 중요한점은 Factoial 0의 값은 1이다 (1 Factoial의 값은 당연히 1)
func factorialOfValue(value : Int) -> Int {
if value == 0 {
return 1
}
var product : Int = 1
for i in 1...value {
product = product * i
}
return product
}
factorialOfValue(value: 3)
factorialOfValue(value: 5)
위 예제에서 value 값을 3을 넣으면 3은 == 0과 같지 않기 때문에 for in 구문이 실행되고 1... 3 반복문이 실행된다.
변수 product는 1이기 때문에 1 = 1 X 1이 실행되고 product는 1이 된다 -> 다음 반복에서 product = 1 이기 때문에 1 = 1 X 2 가 실행되고 product는 2가 된다 -> product는 2이기 때문에 2 = 2 X 3이 실행되고 product는 6으로 반복문이종료되고 값은 6이 나온다.
만약 value의 값이 0이라면 if 에서 걸러져 값 1을 리턴해준다
Recursion
한국말로 재귀 함수라고도 불리며 자기 자신을 호출하는 함수, 메서드입니다.
무한루프에 빠질 수 있기 때문에 종료 조건을 꼭 걸어주어야 한다
func recursiveFactoria10Value (_ value : Int) -> Int {
if value == 0 {
return 1
}
print(value)
return value * recursiveFactoria10Value(value - 1)
}
recursiveFactoria10Value(3)
recursiveFactoria10 Value 함수에 value 3을 넣으면 value 3 == 0 이 아니기 때문에 3 X recursiveFactoria10 Value(value - 1) 가 실행되고 recursiveFactoria10Value(value - 1) 함수이기 때문에 value -1 인 2를 넣고 다시 실행합니다. (recursiveFactoria10Value(2) 의 값은 모름)
value 2 == 0 아니기 때문에 2 X recursiveFactoria10Value(value - 1)가 실행되고 recursiveFactoria10Value(value - 1) 함수이기 때문에 value -1 인 1을 넣고 다시 실행합니다. (recursiveFactoria10 Value(1)의
value 1 == 0 아니기 때문에 1 X recursiveFactoria10 Value(value - 1)가 실행되고 recursiveFactoria10Value(value - 1) 함수이기 때문에 value -1 인 0을 넣고 다시 실행합니다. (recursiveFactoria10 Value(0)의 값은 모름)
value == 0이기 때문에 리턴 1을 실행하고 recursiveFactoria10Value(0) 의 값은 1 이란 걸 알게 되었기 때문에 1 X 1 -> 2 X 2 -> 3 X 2로 몰랐던 recursiveFactoria10 Value(1, 2, 3)의 값들이 풀리면서 6이 됩니다.
재귀 함수는 for, while 문으로 대체가 가능하지만 배열 안의 배열 같은 경우에는 재귀 함수가 더 적합하고 간결하게 작성 가능
그러나 재귀 함수는 부를 때마다 메모리에 스택이 쌓여 for, while에 비해 시간이 더 오래 걸림
'Swift Algorithms' 카테고리의 다른 글
6. Fibonacci Sequence (0) | 2020.07.03 |
---|---|
5. Reverse every other word (0) | 2020.07.03 |
4. Most Common Name in Array (0) | 2020.07.02 |
2. Binary Search (0) | 2020.06.23 |
1. Fizz Buzz (0) | 2020.06.22 |