콜라츠의 추측, 3n+13n+1 문제, 우박수 문제라고 불리는 이 문제는 다음과 같다.
1, 어떤 자연수 nn이 입력되면,
2. nn이 홀수이면 3n+13n+1을 하고,
3. nn이 짝수이면 n2n2를 한다.
4. 이 nn이 11이 될때까지 2 32 3과정을 반복한다.
예를 들어 55는 55 → 1616 → 88 → 44 → 22 → 11 이 된다.
이 처럼 어떤 자연수 nn이 입력되면 위 알고리즘에 의해 11이 되는 과정을 모두 출력하시오.
이 문제는 반복문 for, while 등을 이용하여 풀수 없습니다.
금지 키워드 : for while goto
입력
자연수 nn이 입력된다.(1<=n<=10,000,000)(1<=n<=10,000,000)
단, 3n+13n+1이 되는 과정에서 intint범위를 넘는 수는 입력으로 주어지지 않는다.
출력
3n+13n+1의 과정을 출력한다.
입력 예시
5
출력 예시
5 16 8 4 2 1
#include <iostream>
using namespace std;
void recursion(int k) {
cout << k << endl;
if(k == 1) return; // k가 1일경우 종료
if(k % 2 == 1) { // 홀수
recursion(3 * k + 1);
}
else { // 짝수
recursion(k / 2);
}
}
int main() {
int k;
cin >> k;
recursion(k);
}
'PS > CodeUp' 카테고리의 다른 글
CodeUp / Recursion(재귀) / 3702번 / 파스칼의 삼각형2 / C++ (0) | 2020.09.13 |
---|---|
CodeUp / Recursion(재귀) / 1930번 / SuperSum / C++ (0) | 2020.09.13 |
CodeUp / Recursion(재귀) / 1929번 / 우박수(3n+1) - reverse / C++ (0) | 2020.09.13 |
CodeUp / Recursion(재귀) /1920번 / 2진수 변환 /C++ (0) | 2020.09.13 |