C++ 함수

NYH·2023년 11월 4일

C++

목록 보기
5/17

목차

  1. 함수.
  2. printf, scanf
  3. 재귀함수
  4. 문제풀이

1. 함수

함수란?

한가지 작업에 대해 정의되어 있는 기능.


스택

자료구조의 일종으로서 후입 선출(LIFO) 형태를 가지고 있는 자료구조
후입 선출이란 늦게 들어간 데이터가 가장 빠르게나오는 형태의 자료구조.


스택 메모리

TCP School 스택 메모리 참조

함수가 실행될 때 사용하는 메모리 공간입니다.
스택 자료구조와 유사하며, 함수가 실행될 때 스택 메모리 공간에 필요한 크기만큼을 선점하고 종료되면 해당 메모리를 반환합니다.


함수의 리턴 값

함수가 실행되고 종료될 때 스택 메모리를 반환한다면 리턴 값을 반환하고 메모리를 반환하는지, 메모리를 반환하고 리턴 값을 반환하는지 잘 이해가 가지 않습니다.
함수는 리턴 값을 반환하기 위해 CPU에 가까운 레지스터를 활용합니다.
레지스터에서 리턴 값을 임시 저장하고 스택 메모리를 반환한 뒤 해당 리턴 값을 반환합니다.

  • 4Factorial 계산

  • RAX, EAX

  • eax 레지스터에 4Factorial의 값이 옮겨집니다.

    eax, dword ptr[iValue]
    eax 레지스터에 iValue의 값이 저장됩니다.
    4Factorial의 값은 24입니다. 1 * 2 * 3 * 4 = 24
    RAX는 64bit 레지스터이므로 4Factorial의 값인 10진수 24를 16 진수 표현 시 0000000000000018 입니다.
    EAX는 32bit 레지스터이므로 10진수 24를 16 진수 표현 시 000000018 임을 알 수 있습니다.
    RAX의 오른쪽 32비트가 EAX 레지스터와 동일하므로 0000000000000018로 표현됩니다.
    Factorial 함수의 반환값은 EAX레지스터에 저장되는 것을 확인할 수 있습니다.


2. printf, scanf

#include<stdio.h>

#include 구문은 전처리기에 의해 처리됩니다.
전처리기에 의해서 stdio.h 내부의 기능들을 사용할 수 있게 됩니다.


printf

콘솔에 값을 출력하기 위해서 사용하는 함수입니다.
c++ 표준 입출력 라이브러리인 stdio.h를 include해야 사용 가능합니다.

#include<stdio.h>

int main()
{	
	int x = 1;
	printf("%d", x);
    
    float f = 1.5;
    printf("%f, f;
}

%d : 콘솔 출력시 정수형 변수를 치환합니다.
%f : 콘솔 출력 시 실수형 변수를 치환합니다.

scanf

콘솔에서 값을 입력하기 위해서 사용하는 함수입니다.
c++ 표준 입출력 라이브러리인 stdio.h를 include해야 사용 가능합니다.

#include<stdio.h>

int main()
{
	int x;
    scanf("%d", &x);
    
    float f;
    scanf("%f", &f);
    
}

%d : 콘솔 출력시 정수형 변수를 치환합니다.
%f : 콘솔 출력 시 실수형 변수를 치환합니다.


3. 재귀함수

함수 안에서 자기 자신을 호출하는 함수
재귀 함수는 종료조건, 재귀적 함수 호출로 나뉩니다.


종료조건

  • 더 이상 재귀 함수를 호출하지 않고 함수를 종료하는 조건.
  • 해당 조건이 없으면 재귀 함수는 무한루프에 빠집니다.


재귀적 함수 호출

  • 종료조건이 아닌 경우 호출됩니다.
  • 더 큰 문제를 작은 문제로 분류하여 해결하기 위해 사용합니다.
  • 함수의 인자는 현재 문제보다 더 작은 문제를 해결하는 인자값이 들어가야 합니다.


피보나치 수열

int fibonacci(int dest) 
{
	// 종료 조건
	if (dest == 1 || dest == 2)
    {
    	return 1;
    }
    
    // 재귀적 함수 호출
    return fibonacci(dest - 1) + fibonacci(dest - 2);
}

가장 대표적인 예시로 피보나치 수열이 있습니다.
피보나치 수열의 첫번째 값과 두번째 값을 1로 정의합니다.
피보나치 수열에서 첫번째 값과 두번째 값을 찾는 경우를 종료조건으로 지정합니다.
현재 문제보다 더 작은 문제를 해결하기 위해 재귀적 함수 호출을 사용합니다. fibonacci(dest - 1) + fibonacci(dest -2)


4. 문제풀이

문제 1.

스택에 대해서 설명해주세요.


문제 2.

함수의 리턴값은 어떤 과정으로 저장되는지 자세히 설명해주세요.


문제 3.

재귀문제를 풀어봅시다.
별찍기10

profile
그냥 해라

0개의 댓글