재귀를 사용하여 과제에 대한 3 가지 방법으로 collatz 추측을 보여주는 코드를 작성해야합니다. 아이디어에 익숙하지 않다면, n이 짝수이면 n/2로 나누고 n이 홀수 인 경우 3n + 1을 곱해서 초기 값 n을 취하면 궁극적으로 1의 값을 얻을 수 있다고 추측합니다. 3 가지 방법으로 전방, 후방 및 회문 방식으로 알고리즘을 완성했습니다.Collatz 추측문문
예를 들어, 포워드 방식으로 값 (32)은 표시 할 32 16 8 4 2 1
거꾸로 방식으로 값 32 마지막
1 2 4 8 16 32 표시 할 상기 회문 패션은 보여줄 것입니다 32 16 8 4 2 1 2 4 8 16 32
전방과 후방으로 나갈 수 있었지만 회문 부분이 나를 미끄러 져하고 있습니다. 내 모든 노력은 앞으로의 패션을 보여 주거나 나를 무한 루프에 빠트 렸습니다.
* 중요 * 여기 까다로운 부분이다 : 나는 이야 문제 좀 도와 로컬 또는 글로벌 변수를 선언 할 수 없습니다. Collatz 메서드, 루프 및 재귀의 원래 인수 만 사용할 수 있습니다. 누구든지이 사기꾼을위한 해결책을 가지고 있습니까?
def Collatz(number , algorithm):
if number == 1:
print number
return
if algorithm == 'F':
if number % 2 == 1:
print number
Collatz((3*number) + 1, algorithm)
if number % 2 == 0:
print number
Collatz((number/2),algorithm)
if algorithm == 'B':
if number % 2 == 1:
Collatz((3*number) + 1, algorithm)
print number
if number % 2 == 0:
Collatz((number/2),algorithm)
print number
**if(algorithm == 'P'):**
m = input("Enter a positive integer value: ")
displaymode = '' # initialize to anything not F, B, P
while displaymode not in ['F', 'B', 'P']:
displaymode = raw_input("Choose a display mode: F=forward, B=backward, P=palindrome: ")
Collatz(m, displaymode)
print
아마도 사람들이 재귀에 대한 진정한 길을 포용해야합니다. – Iluvatar
솔직히이 경우 로컬 또는 전역 변수를 사용하지 않는 것이 좋습니다. 앞으로 인쇄하려면 숫자를 인쇄 한 다음 나머지는 인쇄하십시오. 거꾸로하려면, 나머지 작업을 한 다음 번호를 인쇄하십시오. palindrome은 단순히 둘 다하고 있습니다. – Kytuzian
나는 그들이 지금 당신을 강요하려고하는 것을 봅니다 ... –