php 우박수 구하기

php 우박수 구하기

QA

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와 같이 비동기 처리 방식을 통해 처리 하여 출력하시면 됩니다.


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));

내용이 출력 되지 않는데 무엇이 잘 못 되었나요?

리스트로 쌓으려면 매개변수에 추가적인 배열을 같이 보내야합니다.


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));


예로 한번 보여드렸는데, 현재 테스트를 못해서 되는지 안되는지는...
이후에 테스트 깔끔한 코드로 다시 댓글 드리겠습니다.

아래 예제코드를 잘 이용해 보세요.

$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);

답변을 작성하시기 전에 로그인 해주세요.
전체 123,162 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT