Programming/C

C언어) 순환을 이용한 최댓값 구하기

쫑드기 2020. 4. 29. 16:51

순환(recursion)이란?

어떤 알고리즘이나 함수가 자기 자신을 호출하여 문제를 해결하는 프로그래밍 기법이다.

 

주의할 점

1. 반드시 순환 호출에는 순환 호출을 멈추는 문장이 포함되어야 한다.

2. 문제의 크기가 순환이 진행될수록 작아지는 것에 유의해야 한다.

 

문제를 풀면서 생각하지 못했던 점들

1.반환값이 꼭 max여야 한다는 생각에 다른 식으로 접근을 하지 못했다.

  ==> 1시간 정도 고민해봤지만 반복문으로 밖에 코드가 나오지 않아 구글링을 했다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
 
int findMax(int arr[],int n)
{
    if (n == 0)    return arr[0]; //배열의 index가 0일 때 a[0]반환
    int max = findMax(arr,n - 1); //max에 a[0]부터 들어가짐.
 
    arr[n] = max < arr[n] ? arr[n] : max; // ?이전의 식이 true이면 arr[n]반환, false이면 max반환
    return arr[n];
}
 
int main(void)
{
    int arr[] = { 4,62,56,78 }; //배열 값 초기화
 
    printf("%d",findMax(arr,3)); //최댓값 출력
    return 0;
}
 
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

시스템 스택 변화 과정

혼자서 척척 풀 수 있는 실력을 가질 그날까지 파이팅!

틀린 점 있으며 피드백 부탁드립니다. 감사합니다. 좋은 하루 보내세요!!