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와 같이 비동기 처리 방식을 통해 처리 하여 출력하시면 됩니다.
답변에 대한 댓글 3개
[code]
function collatz($n, $arr) {
if(!isset($arr))
$arr = [];
array_push($arr, $n);
if($n==1) {
return $arr;
}
elseif($n % 2) {
collatz((3*$n)+1, $arr);
}else {
collatz($n/2, $arr);
}
}
print_r(collatz(10));
[/code]
예로 한번 보여드렸는데, 현재 테스트를 못해서 되는지 안되는지는...
이후에 테스트 깔끔한 코드로 다시 댓글 드리겠습니다.
댓글을 작성하려면 로그인이 필요합니다.
아래 예제코드를 잘 이용해 보세요.
$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);
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인
function collatz($n) {
$list_data = [];
array_push($list_data, $n);
if($n==1) {
return $list_data;
}
elseif($n % 2) {
collatz((3*$n)+1);
}else {
collatz($n/2);
}
}
print_r(collatz(10));
[/code]
내용이 출력 되지 않는데 무엇이 잘 못 되었나요?