알고리즘. Recusion(순환)-최대값 구하기

1 분 소요

🌟 암시적 매개변수와 명시적 매개변수

반복문은 보통 암시적 매개변수를 사용한다. 0부터 n-1까지 반복하라고, 암시적으로 0부터 돌기 때문! 이걸 begin과 end를 정해서 명시적으로 바꾸면 순환이 된다.

🌟 최대값 구하기

반복문

#include <stdio.h>

int main()
{
    int array[] = {1, 10, 6, 7, 56, 20};
    int max = 0;
    
    for(i = 0; i < sizeof(array) / sizeof(int); i++)
    {
        if(array[i] > max)
            max = array[i];
    }
    
    printf("%d", max);
    
    return 0;
}

이렇게 하면 array의 0부터 끝까지 돌아 56을 찾아낼 것이다!

순환

#include <stdio.h>

int max(int list[], int low, int high) { //순환
	int middle;
	int max_left, max_right;

	if (low == high)
		return list[low]; //절반으로 나눈 끝에 low=high이면 자기 자신 반환

	middle = (low + high) / 2;

	max_left = max(list, low, middle); //중앙에서 왼쪽 부분의 최대값
	max_right = max(list, middle + 1, high); //중앙에서 오른쪽 부분의 최대값

	return max_left >= max_right ? max_left : max_right; //조건 연산자 사용하여 왼쪽의 최대값과 오른쪽의 최대값을 비교하여 더 큰것을 반환한다.
	
}

int main(void)
{
	int list[] = { 10, 20, 100, 4, 5, 45, 3, 99, 11, 22 };
	printf("가장 큰 수는 %d\n", max(list, 0, 9)); // 100
	printf("가장 큰 수는 %d\n", max(list, 5, 9)); // 99
	printf("가장 큰 수는 %d\n", max(list, 3, 6)); // 45
}

배열을 반으로 나눠서 순차탐색을 함!

조이의 개발새발 블로그

댓글남기기