php 우박수 구하기
본문
php로 우박수를 구하는 방법을 알고 싶습니다.
< 계산 규칙 >
1.자연수 하나를 고른다.
2.고른 수가 짝수이면 로 나누고, 홀수이면 3을 곱하고 1을 더한다.
3.2의 과정을 반복하면 그 결과는 항상 1이 된다.
< 우박수 해석 >
- 양의 정수 n에 대하여, 다음과 같은 계산 과정을 반복하기 한다.
- n -> n/2 (n이 짝수일 경우)
- n -> 3 * n + 1 (n이 홀수일 경우)
- 13 -> 40 -> 20 -> 10 -> 5 -> 16 -> 8 -> 4 -> 2 ->1
- 콜라츠 추측 이라고 하며, 이런 수들을 우박수라 부르기도 한다.
< 파이썬 >
def Collatz(n):
print(n, end=", ")
if n == 1:
return 1
elif n%2: # 홀수
Collatz(3*n+1)
else: # 짝수
Collatz(n//2)
x = int(input())
Collatz(x)
- 파이썬은 재귀 함수를 사용하여 구하는 방법등 여러가지 있습니다.
답변 2
php 에서도 동일하게 재귀함수로 처리하셔도 됩니다.
function Collatz($n){
echo $n.", ";
if($n == 1)
return 1;
else if($n % 2)
Collatz( (3 * $n) + 1);
else
Collatz($n / 2);
}
위 파이썬 내용을 PHP로 변환한 코드이며, 사용에는 form문 또는 Ajax와 같이 비동기 처리 방식을 통해 처리 하여 출력하시면 됩니다.
!-->아래 예제코드를 잘 이용해 보세요.
$x = 3; // 임의의 자연수
if (is_int($x) && $x <= 0)
exit("자연수를 입력하세요");
function Collatz($n) {
if ($n == 1)
return 1;
if ($n % 2 == 0) { //짝수인 경우
echo "짝수 $n \n";
Collatz($n / 2);
}
else {
echo "홀수 $n \n";
Collatz($n * 3 + 1);
}
}
$r = Collatz($x);