1. 순환
1-2 순환적으로 사고하기
문자열 길이 계산
1char씩 정벅하며 순환
순환의 단위가 k(0부터 시작)번째 단어 n이 될때까지 순환
2진수로 변환하여 출력
2로 나눌 때마다 나머지 출력
모든 순환함수는 반복문으로 변경 가능
그 역도 성립. 모든 반복문은 recursion으로 표현 가능
순환함수는 복잡한 알고리즘을 단순하고 알기 쉽게 표현
하지만 함수 호출에 따른 오버헤드가 있음(매개변수 전달, activation frame 생성 등)
1-3 순환 알고리즘 설계
적어도 1개의 base case, 순환되지 않고 종료되는 case 있어야 함
즉 모든 case는 base case로 수렴한다
리커시브하게 문제 풀 때 원칙
일단 전부 다 해봐야할 거 같으면 순환 함수의 단위를 나눠서 리커시브하게 단계별로 풀어나가야함
리커시브가 해결하는게 개수 인지 bool 인지 결정
모든 case는 결국 base case로 수렴
암시적 매개변수가 아닌 명시적 매개변수가 있어야 함.
미로 찾기
1개 셀에 대해서 동,서,남,북으로 리커시브하게 방문
위 네 방향에서 true를 1개라도 리턴하면 출구 찾음
basecase는
벽이거나 return false
방문했거나 return false
출구라면 return true
cell
현재 픽셀이 속한 blob의 크기 카운트 하기
현재 셀의 대각선, 동서남북(8개 case)를 차례대로 방문
각 리커시브 함수는 방문하며 누적된 개수를 리턴
basecase는
셀의 크기를 벗어나거나
방문한 곳
n-queens
n-queens 케이스 찾아서 출력하기
전부다 방문하며 정답 케이스 1가지 찾기
조건에 맞는 정답을 찾아야 함
전부 다 방문하며 조건에 맞는 것만 기록해야하기 때문에 백트래킹(DFS) 이용
리커시브 함수는 방문한 셀이 조건에 맞는지 확인
조건 맞지 않으면 return 하여 그다음 셀을 인자로 함수 호출
조건 맞으면 다음 행에 대해 리커시브 함수 진행
basecase
조건에 맞지 않거나
현재 방문한 셀이 조건 충족 && 마지막 행일 경우
powerset
모든 멱집합 출력하기
모든 케이스 구하는 문제
멱집합은 부분집합 1개를 선택 하거나 안하거나 2가지 케이스에 대해 상태 트리 그린것
리커시브 함수는 2가지 케이스를 진행
선택하거나
선택안하거나
basecase
모든 케이스를 선택한 경우 출력
Last updated
Was this helpful?