2014-09-09 3 views
1

시작 번호가 주어지면 해당 collatz 체인의 길이를 찾으려고하는 코드를 작성하려고합니다.Collatz chain recursive function C

내가 재귀 적으로이 일을 기대했다 이것은 내가 지금까지 무엇을 가지고 :

#include stdio.h 

int collatz(int number, int count) 
{ 
    if(number == 1) 
    { 
     return count; 
    } 
    if(number%2==0) 
    { 
    number = number/2; 
    collatz(number, count+1); 
    } 
    else 
    { 
    number = number*3+1; 
    collatz(number,count+1); 
    } 
    return 0; 
} 

int main(void) 
{ 
    int stored=0; 
    int temp; 
    for(int i = 1;i<10;i++) 
    { 
     temp = collatz(i,1); 
     if(temp>stored) 
     { 
      stored = temp; 
     } 
    } 
    printf("%i\n",stored); 
} 

문제는 함수가 결국 엔드 포인트에 도달 물론이지만, 그 체인의 길이로 반환됩니다 이것은 새로운 숫자가됩니다.

이 프로그램을 어떻게 구성하면 카운트가 엔드 포인트에 도달 할 때이 값을 첫 번째 호출의 출력으로 사용할 수 있습니까?

답변

1

재귀 호출의 결과를 반환해야합니다. 지금 재귀 호출의 값을 무시하고 0을 반환합니다. 각 재귀 호출은 다음과 같아야합니다.

return collatz(number, count+1); 
+0

답장을 보내 주셔서 감사합니다. 그냥 똑같은 주제에 머무르면서 완벽하게 작동했지만 정수를 사용할 때 세분화 오류가 발생하는 이유는 다소 혼란 스럽지만 모든 정수를 'long long'으로 바꿀 때 잘 돌아갑니다. 왜 그런지 알아? 루프 변수를 최대 백만까지 반복 변경했습니다. – Amir

+0

'number '가 715,827,882보다 큰 홀수로 변하면 어떻게됩니까? –

+0

아하, 감사합니다. – Amir