C++ 세그먼트 에러

조회수 1195회

콜라츠의 추측, 3n+1 문제, 우박수 문제라고 불리는 이 문제는 다음과 같다.

1, 어떤 자연수 n이 입력되면,

  1. n이 홀수이면 3n+1을 하고,

  2. n이 짝수이면 n/2를 한다.

  3. 이 n이 1이 될때까지 2~3과정을 반복한다.

예를 들어 5는 5 → 16 → 8 → 4 → 2 → 1 이 된다.

여기서 5가 1이되기 위해 6개의 숫자를 나열하게 된다. 이것을 길이라고 하면 5의 길이는 6이된다.

시작수와 마지막 수가 입력되면 그 두 사이게 길이가 가장긴 우박수와 그 길이를 출력하시오.

#include <bits/stdc++.h>

#define FOR(N) for(int i = 0; i < N; i++)

using namespace std;

int cltz[100000001];

int hail (int);

int main()
{
    int a, b;

    scanf("%d %d", &a, &b);

    cltz[1] = 1;

    int n = a;
    hail(a);

    for (int i = a + 1; i <= b; i++)
        if (cltz[n] < hail(i))
            n = i;

    printf("%d %d", n, cltz[n]);

    return 0;
}

int hail (int n)
{
    if (n > 100000000) {
        if (n % 2)
            return hail(3 * n + 1) + 1;
        else
            return hail(n / 2) + 1;
    }
    if (cltz[n])
        return cltz[n];

    if (n % 2)
        return cltz[n] = hail(3 * n + 1) + 1;
    else
        return cltz[n] = hail(n / 2) + 1;
}

10만 이상의 값이 들어가면 세그먼트 에러가 뜨는 것 같습니다

Process returned -1073741819 (0xC0000005)

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)