[TIL] 재귀적으로 생각하기

Captainjack·2021년 3월 25일
0

TIL

목록 보기
8/260

재귀적으로 코드를 작성하는 이유

  • 코드가 간결해진다는 점

  • 데이터의 깊이를 모를 때

  • 우리가 만든 데이터가 아닌 타 데이터(API등)를 가져오고 그것이 적합하지 않을 때

  • 꼬리재귀일때

꼬리재귀는 함수의 함수가 계속 늘어지면서 마치 꼬리에 꼬리를 무는 형태의 재귀문에서 중요한데 이때는 어떤 다른 곳에 위치하다가 함수 호출에의해 다른 함수를 먼저 처리한뒤 다시 돌아와서 하던 일을 처리하는 과정이아닌 바로 돌아와서 처리를 지속적으로 함으로 실행속도에 영향을 끼치지 않는 경우를 말한다.

즉, 반대로 꼬리재귀의 형태가 아닐경우 재귀는 비효율적이다.
라고 말할 수 있다.

예를들어 보자 아까 잠시 언급했던 재귀가 뒤에 할일이 남아있을 경우에 먼저 하던일을 처리하고 다시 돌아와야한다. 심지어 다시 돌아올 것을 기억을 해야하기 때문에 처리할 일이 남아있을 경우 비효율적이다.

재귀랑 비슷한 반복문의 경우 재귀는 반복문을 대체할 수 있지만 그 역은 성립하지 않는다. (어찌저찌 가능하다고 해도 어거지 느낌?)

재귀중 가장 어려운 문제는 tower of hanoi (면접시 질문 받을 수 있으니 공부해놓자.)

const head = arr[0];
const tail = arr.slice(1);

return func(tail) //함수를 반복문으로 만드는 방법

하노이의 탑(Tower of Hanoi)은 퍼즐의 일종이다. 세 개의 기둥과 이 기둥에 꽂을 수 있는 크기가 다양한 원판들이 있고, 퍼즐을 시작하기 전에는 한 기둥에 원판들이 작은 것이 위에 있도록 순서대로 쌓여 있다.

게임의 목적은 다음 두 가지 조건을 만족시키면서, 한 기둥에 꽂힌 원판들을 그 순서 그대로 다른 기둥으로 옮겨서 다시 쌓는 것이다.

한 번에 하나의 원판만 옮길 수 있다.
큰 원판이 작은 원판 위에 있어서는 안 된다.


끄적끄적

재귀나 알고리즘은 모두 손 코딩을 통해 연습해 볼 것.

신텍스 파라미터는(…args) === 얕은복사이다.

profile
til' CTF WIN

0개의 댓글