void f()
{
f();
// 자신을 부르는 함수 : f를 부르면 f도착해서 부르고 부르고 무한 반복
}
void Print(int x)
{
if (x < 0)
{
return;
//f(-1)이 걸리면 return; f(0)의 line 11로 들어옴 그러고 함수가 끝나면 f(1)의 line 11으로
//f(9)인 상태에서 빠지면 그 다음에야 main()으로 돌아가게됨
}
std::cout << x << std::endl;
Print(x - 1);
// 9876543210
// 먼저 출력하고 함수로 들어감
// 먼저 출력작업하고 쌓아감
Print(x - 1);
std::cout << x << std::endl;
// 0123456789
// 먼저 재귀하고 출력
// 다 쌓고 출력작업
//마지막 Print(0)으로 호출되면 x=-1 -1이므로 if문에걸리면
//return 되고 더이상 함수를 부르지 않고 std::cout<<x 출력
//이때 인자는 0이므로 -1이 아니라 0에서 끝나게 됨
}
int main()
{
Print(9);
}
void Recursive(x)
{
if (Base Case)
{
return;
}
동일한 해법이 존재해야함
범위는 작아저야 함
Recursive(x-1 or x/2 등등의 x보다 작은 값의 패턴-Recursive Case);
}
Base Case
Recursive Case
void Print(int array[5],int start, int end)
{
//base case
if (start > end)
{
return;
}
std::cout << array[start] << std::endl;
//recursive case
Print(array,start+1,end); // start++는 나를 증가시킴 start+1은 start에 1 추가
//array만 쓰기 index쓰면 원소를 말하는 것
}
//base case
if (start<=end)
{
std::cout << array[start] << std::endl;
Print(array, start + 1, end);
}
int main()
{
int array[5]{ 1,2,3,4,5 };
Print(array,0,4);
}
int Sum(int array[5], int start, int end) // 원소 몇개 처리>?
{
//base case
if (start == end)
{
return array[start] ;
}
//recursive case
return array[start] + Sum(array, start + 1, end);
}
int main()
{
int array[5]{ 1,2,3,4,5 };
Sum(array,0,4); // 배열의 합계를 구해보세요
}