자신을 정의할 때 자기 자신을 재 참조하는 방법을 재귀라고 한다.
이런식으로 func()라는 메소드를 정의할때
func 메소드안에 func을 호출하고 그 호출 한 func 안에 func을 참조하는, 이러한 방법이 재귀이다.
이렇게 함수안에 함수를 재 호출 하다보니 몇가지 고려해야할게 있다.
1. 재귀호출이 너무 반복적으로 많이되면 , 즉 재귀가 깊어지면 Stack OverFlow라는 에러가 발생한다.
+ 많이 호출되는 만큼 메모리에 스택되기 때문에 메모리를 엄청 차지한다.
+ 호출된 함수를 닫으면서 스택된 메모리에서 pop을 하기 때문에 수행시간도 느려진다.
결국 재귀호출을 하다가 메모리가 부족해지는 것과 성능이 저하되는것이 일상이기 때문에 이러한 이유로 재귀호출은 평상시에 알고리즘 자체가 재귀로 하면 자연스럽거나 , 재귀호출이 적을거같을때 사용하고 그 이외에는 자주 쓰이지 않는다고 한다.
2. 재귀 함수가 끝나는 지점을 정확하게 구현해야한다.
재귀함수를 구현할때 끝나는 지점이 명확하지않으면 무한루프에 빠진다.
재귀로 풀 수 있는 문제는 거의 대부분 반복문으로 대체하여 풀 수 있다고한다.
재귀적으로 생각하기 어렵다면 , 반복문으로 해결해보자.
'자바 > 알고리즘' 카테고리의 다른 글
[Java] DFS, BFS (0) | 2022.12.20 |
---|---|
[Java] 그리디 알고리즘 (Greedy Algorithm) , 탐욕 알고리즘 (0) | 2022.12.20 |
[Java] 동적프로그래밍 , Dynamic Programming (0) | 2022.12.14 |
[Java] 이분탐색 ,이진탐색 (0) | 2022.12.07 |
순열,중복순열,조합,중복조합 정리 (0) | 2022.10.17 |
댓글