안녕하세요 넬다이 입니다.
오늘 정리할 내용은 재귀 함수 및 2차원 배열입니다.
오늘 내용은 별다르게 어려운 내용은 없으니 너무 긴장 마시고 파이팅해주세요~
재귀 함수
recursive call 이라고도 불리며 재귀 함수는 코드의 양을 줄일 수 있다는 장점이 있다.
하지만 코드를 파악하기가 어렵고 디버깅이 힘들고 재귀 함수는 반복문보다 속도가 느리다.
stack 영역의 메모리가 낭비가 되는데
왜냐하면 마지막 call 이 끝나기 전까지 계속해서 메모리를 할당하고 있기 때문이다.
기본적으로 재귀 함수는 무한이라는 개념이 있기 때문에 사람들이 봤을 때는 직관적이지 않는 단점도 있다.
자 그러면 재귀 함수와 반복문을 코드로써 확인해보도록 하겠습니다
//재귀 함수 호출을 통한 팩토리얼 연산함수
int Factorial(int iFact)
{
if(iFact == 1)
return 1;
else
return iFact * Factorial(iFact - 1);
}
위 코드는 팩토리얼 함수를 재귀로써 구현을 한 코드입니다.
int Factorial(int iFact)
{
if(iFact == 1)
return 1;
else
{
int iValue = 1;
for(int i = 1; i < iFact; ++i)
{
iValue *= i;
}
}
return iValue;
}
자 위에 코드는 팩토리얼을 반복문으로 구현을 해본 함수입니다.
제가 위에서 설명드린 것처럼 무엇이 읽기 편한 코드일까요??? 저는 반복문이 한눈에 들어와서 저만 편하다고 생각하는지는 잘 모르겠지만 후자가 한눈에 들어온다고 생각이 들어요.
이처럼 재귀 문은 코드량을 확실하게 획기적으로 줄여주지만 그만큼 가독성이 떨어진다는 점 명심하시고 사용하면 되겠습니다.
2차원 배열
2차원 배열을 기존에 배웠던 배열과 같은 역할을 한다.
배열이 있고 그 배열이 여러 개라는 뜻이다 쉽게 이해하기 위해서 코드로 설명드립니다.
int iArray[3][4] =
{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
2차원 배열은 이런 형태라고 생각하시면 됩니다.
보시면 4개의 배열이 3개가 있는 것을 볼 수 있습니다.
간단하게 사용을 하자면은
#include <iostream>
using namespace std;
void SumTotal(int iArray[][4], int iColumn);
void main(void)
{
int iArray[3][4] =
{
{1, 2, 3, 4},
{5, 6, 7, 8},
{9, 10, 11, 12}
};
SumTotal(iArray, 3);
}
void SumTotal(int iArray[][4], int iColumn)
{
for(int i = 0; i < iColumn; ++i)
{
for(int j = 0; j < 4; ++j)
{
cout << iArray[i][j] << endl;
}
}
}
이런 식으로 사용이 가능합니다.
자 오늘은 재귀 함수 및 2차원 배열에 대해서 알아봤는데요
재귀 함수는 오늘 처음 배우신 내용이지만 2차원 배열은 기존 배웠던 내용에서 확장된 내용이라
그렇게 설명할 게 없는 거 같아요.
헷갈리시는 분이 계시다면은 기존 배열에 가셔서 한번쯤 다시 정독하는 것도 나쁘지 않을 것이라고 생각합니다.
자 그럼 오늘 강의도 봐주신 여러분 감사합니다~.
[개발/C&C++] - (C/C++ 속성 정리) 18일 차 : 리스트를 이용해서 성적표 만들기 및 설계
[개발/C&C++] - (C/C++ 속성 정리) 17일 차 : 성적표 만들기 및 설계
[개발/C&C++] - (C/C++ 속성 정리) 16일 차 : 메모리 관련 함수
'개발 > C&C++' 카테고리의 다른 글
(C/C++ 속성 정리) 23일 차 : 분활컴파일 및 (0) | 2020.07.14 |
---|---|
(C/C++ 속성 정리) 22일 차 : 함수포인터를 이용한 사칙연산 계산기 만들기 (0) | 2020.07.13 |
(C/C++ 속성 정리) 21일 차 : 함수포인터 (0) | 2020.07.12 |
(C/C++ 속성 정리) 20일 차 : 레퍼런스 변수의 사용 (0) | 2020.07.11 |
(C/C++ 속성 정리) 18일 차 : 리스트를 이용해서 성적표 만들기 및 설계 (0) | 2020.07.08 |
(C/C++ 속성 정리) 17일 차 : 성적표 만들기 및 설계 (0) | 2020.07.07 |
(C/C++ 속성 정리) 16일 차 : 메모리 관련 함수 (0) | 2020.07.06 |
(C/C++ 속성 정리) 15일 차 : 포인터와 동적할당 (0) | 2020.07.05 |