자바/알고리즘

[Java] 재귀 [미완]

backend dev 2022. 12. 5.

자신을 정의할 때 자기 자신을 재 참조하는 방법을 재귀라고 한다.

 

 

이런식으로 func()라는 메소드를 정의할때

func 메소드안에 func을 호출하고 그 호출 한 func 안에 func을 참조하는, 이러한 방법이 재귀이다.

 

이렇게 함수안에 함수를 재 호출 하다보니 몇가지 고려해야할게 있다.

 

1. 재귀호출이 너무 반복적으로 많이되면 , 즉 재귀가 깊어지면 Stack OverFlow라는 에러가 발생한다.

+ 많이 호출되는 만큼 메모리에 스택되기 때문에 메모리를 엄청 차지한다.

+ 호출된 함수를 닫으면서 스택된 메모리에서 pop을 하기 때문에 수행시간도 느려진다.

결국 재귀호출을 하다가 메모리가 부족해지는 것과 성능이 저하되는것이 일상이기 때문에 이러한 이유로 재귀호출은 평상시에 알고리즘 자체가 재귀로 하면 자연스럽거나 , 재귀호출이 적을거같을때 사용하고 그 이외에는 자주 쓰이지 않는다고 한다.

 

2. 재귀 함수가 끝나는 지점을 정확하게 구현해야한다.

재귀함수를 구현할때 끝나는 지점이 명확하지않으면 무한루프에 빠진다.

 

 

재귀로 풀 수 있는 문제는 거의 대부분 반복문으로 대체하여 풀 수 있다고한다.

재귀적으로 생각하기 어렵다면 , 반복문으로 해결해보자.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글