더북(TheBook)

루프를 통과할 때마다 프로그램은 n의 값을 출력하고, n이 짝수 또는 홀수인지 확인한다. 짝수이면 n2로 나눠준다. 홀수이면 n의 값을 n*3 + 1로 바꿔준다. 예를 들어 sequence에 전달된 인수가 3이면 n의 결괏값은 3, 10, 5, 16, 8, 4, 2, 1이 된다.

n은 때로는 증가하고, 때로는 감소하기 때문에 n1이 되는 경우, 즉 프로그램이 종료된다는 명확한 증명은 없다. n에 특정 값을 적용해 프로그램의 종료를 증명할 수는 있다. 예를 들어 시작 값이 2의 제곱수이면 n은 루프를 통과할 때마다 짝수가 되고, 결국에는 1이 된다. 앞 예제도 16으로 시작하는 순차열에서 끝났다.

어려운 문제는 이 프로그램이 n에 대해 모든 양수에 대해 종료하는지 증명할 수 있는가다. 지금까지는 어느 누구도 이를 증명하거나 반증할 수 없었다!(자세한 내용은 http://en.wikipedia.org/wiki/Collatz_conjecture를 참고하자)**

연습삼아 92쪽 “재귀”에서 소개한 print_n 함수를 재귀 대신 이터레이션을 사용해 재작성해보자.

 


 

** 역주 콜라츠 추측(Collatz conjecture)은 3n+1 추측, 우박(헤일스톤) 수열 등 여러 이름으로 불린다. 정수에 대해 주기가 늘어나기도 하고, 감소하기도 하는데 이 과정이 우박이 생성되는 과정과 닮았다고 해서 우박수 문제라고 한다. 현재까지 모든 자연수에 대한 증명은 발견되지 않았다. 이 책의 지은이는 루프의 종료 조건이 항상 확인/증명할 수 있는 것은 아니다, 라는 의도로 이 예제를 고른 것으로 보인다. 현재까지는 4, 2, 1로 수렴하는 패턴을 벗어나는 수를 발견하지 못했으므로 결국에는 종료될 것이라고 생각해도 될 것이다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.