그냥 게임개발자

BigOTest 본문

내 개인적인 공부/자료구조

BigOTest

sudoju 2024. 4. 15. 23:19
#include <iostream>

using namespace std;


int arr[100];
int cnt;

int SumAdd(int l, int r)
{
    cnt++;
    if (l == r)
        return arr[l];
        
    int mid = (l + r) / 2;
    
    int sum = SumAdd(l, mid) + SumAdd(mid + 1, r);
    
    return sum;
}

void main()
{
    int number;
    cin >> number;

    for (int i = 0; i < number; ++i)
    {
        arr[i] = i + 1;
    }
    
    int sum = SumAdd(0, number - 1);
    
    cout << sum << '\n';
    cout << "cnt : " << cnt << '\n';

    return 0;
}

 

자 우리는 재귀함수를 통해서 1 ~ n까지 더하는 재귀함수를 만들었습니다.

코드 설명은 넘어가구요.

오늘 약간의 꼼수라고 보면 될 것 같네요.

 

이 결과물은 number에 따라 다른데, 만약 number가 5라면 결과값은 15와  cnt는 9라는 숫자가나옵니다.

그렇다면 10을 입력하면 55와 19라는 숫자가 나옵니다.

 

그러면 여기서 시간 복잡도는 얼마로 예상할 수 있나요?

cnt를 보면 얼마나 반복했는지 알  수 있는데

무언가 조금 보이긴 하네요.

9랑 19

입력값은 5와 10

(5*2) - 1 = 9

(10 * 2) - 1 = 9

오호

그러면 결국

n*2-1이네요.

여기서 상수를 지워서

O(n)으로 말할 수 있겠습니다.

끄으틍

 

'내 개인적인 공부 > 자료구조' 카테고리의 다른 글

Array요소 수정 방법들  (0) 2024.04.15
재귀함수  (0) 2024.04.15
값에 의한 호출, 참조에 의한 호출  (0) 2024.04.14
primitive 타입, reference 타입  (0) 2024.04.14
자료구조 시간 복잡도  (0) 2024.04.14