SEB_BE_43 / 23.01.12 회고

rse·2023년 1월 12일
0

코드스테이츠_BE_43

목록 보기
13/65

오늘의 핵심

  • 재귀

재귀

재귀란 자신 스스로를 호출하는 것이다.
그리고 쪼개는 것!

더 이상 쪼개지지 않을 때까지 쪼개는 것이다.
그리고 더 이상 쪼개지지 않을 때가 탈출 조건이 되겠다.

필요조건

  • 탈출문 (return)

예로들어서 배열에 있는 값을 모두 더한다. 라고 한다면

int[] num = {1,2,3,4,5,6};
public int[] addSum (int[] num) {
	if (num.length == 0) // 배열의 길이가 0 = 빈배열일 때(탈출조건)
    return 0;
  	
 int[] abc = Arrays.copyOfRange(num, 1, num.length);
 (Arrays.copyOfRange = 어떤 배열 사용할껀지, 시작점, 종료점)
 
 return addSum(abc) + num[0];
 (
    
    

stackoverflow = 무한루프 돌 때

Math.abs(절대값 찾는 함수) -> 음수 넣으면 양수로 변환

재귀에서 호출하면서 괄호 안은 인덱스와 같다.
ex ) 피보나치 문제 return f(num -2) + f(num-1)
재귀에서 피보나치를 구현하게 되면 스택이 기하급수적으로 늘어남


팩토리얼을 계산한 코드다.
input이 5라고 했을 때
input이 1보다 작거나 같은지 확인 -> (5 - 1 = 4) * 5 * 4
input이 1보다 작거나 같은지 확인 -> (4 - 1 = 3) * 5 * 4 * 3
input이 1보다 작거나 같은지 확인 -> (3 - 1 = 2) * 5 * 4 * 3 * 2
input이 1보다 작거나 같은지 확인 -> (2 - 1 = 1) * 5 * 4 * 3 * 2 * 1
input이 1보다 작거나 같은지 확인 -> 탈출.

그리고 거꾸로 다시 돌아감. 결과 도출.

결과 120

연산은 우리가 하는게 아니고 맡기는 것.
head && and(tail)

연습문제

문제 : 배열을 입력받아 순서가 뒤집힌 배열을 리턴해야 합니다.

주의사항

함수 reverseArr는 재귀함수의 형태로 작성합니다.
반복문(for, while) 사용은 금지됩니다.
입력받은 배열은 함수의 호출 뒤에도 처음 상태를 유지해야 합니다(immutability).
빈 배열은 빈 배열 그대로를 리턴해야 합니다.

코드

profile
기록을 합시다

0개의 댓글