한가지 작업에 대해 정의되어 있는 기능.
자료구조의 일종으로서 후입 선출(LIFO) 형태를 가지고 있는 자료구조
후입 선출이란 늦게 들어간 데이터가 가장 빠르게나오는 형태의 자료구조.
함수가 실행될 때 사용하는 메모리 공간입니다.
스택 자료구조와 유사하며, 함수가 실행될 때 스택 메모리 공간에 필요한 크기만큼을 선점하고 종료되면 해당 메모리를 반환합니다.
함수가 실행되고 종료될 때 스택 메모리를 반환한다면 리턴 값을 반환하고 메모리를 반환하는지, 메모리를 반환하고 리턴 값을 반환하는지 잘 이해가 가지 않습니다.
함수는 리턴 값을 반환하기 위해 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레지스터에 저장되는 것을 확인할 수 있습니다.
#include 구문은 전처리기에 의해 처리됩니다.
전처리기에 의해서 stdio.h 내부의 기능들을 사용할 수 있게 됩니다.
콘솔에 값을 출력하기 위해서 사용하는 함수입니다.
c++ 표준 입출력 라이브러리인stdio.h를 include해야 사용 가능합니다.
#include<stdio.h>
int main()
{
int x = 1;
printf("%d", x);
float f = 1.5;
printf("%f, f;
}
%d : 콘솔 출력시 정수형 변수를 치환합니다.
%f : 콘솔 출력 시 실수형 변수를 치환합니다.
콘솔에서 값을 입력하기 위해서 사용하는 함수입니다.
c++ 표준 입출력 라이브러리인stdio.h를 include해야 사용 가능합니다.
#include<stdio.h>
int main()
{
int x;
scanf("%d", &x);
float f;
scanf("%f", &f);
}
%d : 콘솔 출력시 정수형 변수를 치환합니다.
%f : 콘솔 출력 시 실수형 변수를 치환합니다.
함수 안에서 자기 자신을 호출하는 함수
재귀 함수는 종료조건, 재귀적 함수 호출로 나뉩니다.
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)
스택에 대해서 설명해주세요.
함수의 리턴값은 어떤 과정으로 저장되는지 자세히 설명해주세요.
재귀문제를 풀어봅시다.
별찍기10