라벨이 알고리즘인 게시물 표시

배열의 개념

이미지
 안녕하세요. 아마 배열은 프로그래머들이 가장 자주 접하는 알고리즘 중에 하나이지 않을까 생각합니다. 자주 사용하지만 개념이 명확하지 않는 경우가 있습니다. 그래서 이번에는 배열의 주제로 글을 작성하게 되었습니다. 배열은 인덱스라는 주소로 되어있다고 보시면 됩니다. 시작은 인덱스 0부터 시작하고 그 안에 데이터를 넣을수 있습니다. 하지만 실제 배열이 램에 저장되어있는 주소가 있는데 000000번에서 4씩 증가하는 것을 볼수 있습니다. 이는 배열의 원소가 정수(int)일때 같은 바이트 만큼 띄어져서 저장됨을 알수 있습니다. 위 처럼 정수를 저장할수가 있습니다. 정수의 크기는 변하지 않기 때문에 각 배열의 원소로 충분히 들어갈수 있습니다. 인덱스만 알면 쉽게 해당 인덱스에 있는 원소값을 읽을수가 있습니다.  하지만 만약 중간에 일부 원소를 삭제해야 하는 상황이라면 번거로운 상황이 생깁니다. 인덱스2가 삭제되면 그 뒤의 모든 원소들이 삭제된 원소 만큼 1씩 올라가야 합니다.  위 예제는 5개의 원소가 존재하는 배열이지만 실제 프로그래밍 할때는 원소의 갯수가 훨씬 많습니다. 그렇기 때문에 마지막 인덱스를 제거하는 것이 아닌 중간 아니면 0번 인덱스를 삭제 혹은 추가하는 것이 프로그램을 무겁게 만들수가 있습니다.

재귀(Recursion) 함수

이미지
 안녕하세요. 알렉스 입니다. 이번에는 재귀함수에 대해서 글을 작성할려고 합니다. 재귀함수는 거의 대부분의 프로그래밍 언어에서 사용된다고 볼수 있는 함수입니다. 재귀함수를 만들기위해 중요한 사실 2가지가 있습니다. 먼저 문제를 최대한 작게 만듭니다. 이는 Return에서 재귀하기위해서 중요합니다. 그리고 언제 그만둘지도 조건을 정해야 합니다. 안그러면 함수->재귀->재귀 ***** PC고장날때까지 계속 수행합니다.  위사진은 팩토리얼(factorial)의 위치를 입력(num값)하면 팩터리얼의 값을 출력하는 순서도와 코드 입니다. 사용자가 3을 입력하면 0,1,1,2 순서로 최종 2가 출력됩니다.  1 : 초기값 설정(num)  2 : 재귀조건확인(num>1)  3 : 재귀 시작  4 : 재귀 종료 처리  5 : 리턴(Return)  6 : 프로그램 종료  위 재귀함수의 3번을 보면 단순히 재귀를 반복하는 것이 아니라 num > 1이상이면 return부분에서 2개의 재귀함수로 나누는 것을 확인할수 있습니다.   3번에서 재귀함수가 나눠지고 Base조건에 도달하면 값을 Return합니다. 이때 거슬러 올라가서 처음 재귀함수가 이루어졌던 곳에서 모든값들이 결합하고 최종 값을 리턴합니다.  만약 Base조건을 제대로 만들지 않는다면 위의 사진에서 각 분기점마다 Base 지점이 없고 뿌리처럼 무한정 증식하게 될것 입니다.