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 에서도 동일하게 재귀함수로 처리하셔도 됩니다.
</p>
<p>function Collatz($n){</p>
<p> echo $n.", ";</p>
<p> </p>
<p> if($n == 1)</p>
<p> return 1;</p>
<p> else if($n % 2)</p>
<p> Collatz( (3 * $n) + 1);</p>
<p> else</p>
<p> Collatz($n / 2);</p>
<p>}</p>
<p>
위 파이썬 내용을 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]
내용이 출력 되지 않는데 무엇이 잘 못 되었나요?