2017-12-19 2 views
1

다음 숙제에 대한 해독을 시도하고 있습니다. 내 코드는 190으로 평가되지만 대신 114로 평가됩니다. 따라서 코딩 요구 사항을 이해하고 있다고 생각하지 않습니다.Python에서 목표로하는 Collatz 추측에 대한 이해

Collatz 추측은 그 동작이 세계 최고의 수학자는 여전히 이해하지 않도록 예측할 수있는 간단한 계산 과정의 예입니다.

의 결과를 정수 n 소요 짝수 개의 n 경우하여 나누고 승산 (3)에 의한 n하고 추가 (위키 피디 페이지 위 에 정의) f(n)n 홀수이면 간단한 함수를 고려 . 추측은 함수 f 에 대한 호출 수가 증가함에 따라 f(f(f(...f(f(n))))) 형태의 표현식 값을 연구하는 것을 포함합니다. 추측은 음이 아닌 정수 n, f n의 반복 응용 프로그램에 대한 항상이 질문에 대한 당신의 작업은 파이썬 에 Collatz 기능 f을 구현하기 위해 1

입니다 포함 정수의 순서를 얻을 수 있다는 것입니다 . 구현의 핵심은 이 n이 짝수 또는 홀수인지 여부를 확인하는 테스트를 작성하는 것입니다. 을 2로 나눌 때 나머지가 인지 여부를 확인하는 것은 0 또는 1입니다. 힌트 : 나머지 부분은 파이썬에서 % 표현 n % 2을 통해 %을 사용하여 계산할 수 있습니다. 참고로 f을 계산할 때는 정수 나누기 // 을 사용해야합니다.

f을 구현했으면 표현식 f(f(f(f(f(f(f(674)))))))에서 구현을 테스트하십시오. 이 표현식은 에서 190으로 평가됩니다.

from __future__ import division 


def collatz(n): 
    l = [] 
    l.append(n) 
    while n != 1: 

     if n % 2 == 0: 
      n = n // 2 
      l.append(n) 

     else: 
      n = (3*n) + 1 
      l.append(n) 
    return l 


print len(collatz(674)) 
+0

당신은'f'를 구현하지 않았지만 완전히 다른 (관련 있음에도 불구하고) 기능을 구현했습니다. 'f'는 전체 시퀀스가 ​​아니라 다음 시퀀스를 계산해야합니다. –

답변

2

당신은 중간 질문을 오해. 귀하의 프로그램은 더 큰 질문에 답하려고합니다 ... 이것은 반환해야 할 것입니다. 190 :

def f(n): 
    return n // 2 if n % 2 == 0 else 3*n + 1 


print f(f(f(f(f(f(f(674))))))) 
+0

감사합니다 줄리앙. 알았다! – charlie