목록분류 전체보기 (189)
안선생의 개발 블로그

하노이 탑에는 조건이 있다. 1. 한 번에 한 개의 원판만을 다른 탑으로 옮길 수 있다. 2. 쌓아 놓은 원판은 항상 위의 것이 아래의 것보다 작아야 한다. n개의 원판이 있고 a에서 c까지 보낸다고 했을 떄 예를 보자 n이 1인 경우 이 경우는 바로 c까지 보내면 된다. cout
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 #include using namespace std; int f[10] = {}; // 전역변수 int fibo(int n) // 반복문을 이용한 피보나치 { int s = 0, f0=0, f1=1; if (n
일반재귀 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 #include using namespace std; int fun(int n) { if (n > 0) { return fun(n - 1)+n; } return 0; } int main() { int x; x=fun(5); cout fun(2) +n-> fun(1)+n ->fun(0)+n 조건문에 걸려서 반대로 올라간다. n은 1부터 시작해서 올라간다. fun(0) = 0+1 = 1 fun(1) = 1 +2 = 3 fun(2) = 3 +3 = 6 fun(3) = 6 +4 = 10 fun(4) = 10 +5 = 15 fun(5) = 15 결과값은 15가 나온다. 정적변수를 이용 1 2 3 4 5 6 7 8 ..
재귀 함수는 함수가 자기 함수를 호출하는것을 재귀 함수라고 한다. 이 재귀 함수에는 종료할 수 있는 기본 조건이 있어야 한다. 그러치 않으면 계속 자기 자신을 호출하면서 무한루프에 빠지게 된다. 예; 꼬리 재귀 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include using namespace std; void fun(int n) { if (n > 0) { cout

스택 정적메모리 할당 void main() { int a; // 4byte int b; //4byte } 이 코드는 메모리에서 코드세션으로 메인함수를 불러오고 필요한 8바이트에 메모리는 스택 내부에 할당됩니다. 따라서 함수에 할당된 메모리 부분을 해당 함수의 활성화 레코드라고 한다. 따라서 스택 내부에 메모리가 할당되는 방식은 내부에 있는 변수에 따라 다르다. 함수가 필요한 메모리의 크기는 컴파일 시에만 알 수 있기에 컴파일 시에만 결정된다. 따라서 이 기능에는 많은 메모리가 필요하고 해당 메모리는 프로그램이 실행을 시작하면 스택 내부에 가져온다 . 그것을 정적 메모리 할당이라고 한다. 여기서 정적이란 함수에 필요한 메모리의 바이트 수는 컴파일 시간에만 결졍된다 이것이 정적이다. 컴파일 시간 또는 런타임..

다형성 , 가상함수(virtual) 부모 포인터 타입으로, 부모 클래스로부터 파생되는 자식클래스 객체들의 주소를 가리킬 수 있다. 모든 객체를 부모 클래스 타입으로 인식하게 되기 때문에, 실제 객체가 무엇인지 알 수 없다. 자식의 함수가 호출 될줄알았지만 부모 함수가 호출됨 해결방안 virtual 키워드를 통해서, 각 클래스는 자신만의 고유한 가상함수 테이블을 가지게 된다. 가상함수를 붙여줌으로써 각 클래스의 객체들은 가상함수 테이블 포인터에서 해당 클래스에 맞는 테이블을 가리키게 된다. 그 테이블에는 해당 클래스의 가상함수들이 등록 다시 실행하면 자식 함수가 실행됨 다운 캐스팅 부모 클래스에서 선언되지 않은, 오직 자식쪽에서만 추가된 함수를 호출 하고 싶을 떄 자식 포인터타입으로 일시적으로 캐스팅 해서..

오버 라이딩 부모 클래스의 멤버함수를 자식쪽에서 재정의 함으로써, 자식 클래스에 구현된 기능이 호출되도록 한다. 부모의 output함수가 있고, 자식 클래스에도 같은 output()함수가 있다. 이렇게 되면 뭐가 출력이 될까? cp.output(); // 부모의 함수가 출력 ch.output(); // 상속받은 부모클래스의 함수를 재정의(오버라이딩)되서 자식 함수가 호출됨 ch.CParent::output(); // 부모의 함수가 출력됨 근데 굳이 오버라이딩 했는데 부모로 접근할 필요가 없다. 오버로딩은 매개변수가 다른 함수를 여러개 선언할 수 있는 것이고 오버라이딩은 부모 클래스의 멤버함수를 자식쪽에서 재정의 함으로써, 자식 클래스에 구현된 기능이 호출되도록 한다. 출처 : https://www.you..
상속 부모클래스의 기능을 자식 클래스가 쓸 수 있다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 #include using namespace std; class CParent //부모 클래스 { protected: //자식은 접근 가능 int m_i; public: CParent() // 기본생성자 :m_i(0) {} CParent(int a) ..
map 사용법 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 #include #include //백터 사용하기 위한 참조 #include //리스트 사용하기 위해서 선언 #include"CArr.h" #include "test.h" #include "CList.h" #include #include #include #include #include #include "CBST.h" using namespace s..

Tree는 자료구조의 한 종류이며 계층관계를 표현할 때 많이 사용된다. 계층관계를 사용할 떄 용이함 Tree는 순회가 불가능 하다. ex) 회사 조직도 ,폴더 구조 등 노드 : 1,2,3등등 객체가 노드 root : 부모가 없는 노드 트리의 맨위 1번노드 부모 : 자신보다 하위 노드를 가지고 있는 노드 1 2 3 자식 : 부모에 하위 노드 리프(leaf) : 자식 노드를 가지고 있지 않는 노드 4 5 6 7 level : 루트부터 레벨 0 , 그 하위 단계를 레벨1, 점차 늘려감 이진트리 자식에 갯수가 2개 이하인 트리 완전 이진트리 완전한 트리 형태를 가진 이진트리를 말한다. 보통 배열로 나타낸다. 배열의 자식은 2 * 인덱스 +1가 자식이다. 2k+1 예 1번 루트의 자식은 2*0 +1 인덱스 1에 ..