본문 바로가기
C C++/C C++ 알고리즘 문제 기타

[C/C++] 코드업 1929 : (재귀함수) 우박수 (3n+1) (reverse)

by Go! Jake 2022. 10. 9.

문제풀이

이전 문제와 다르게 재귀 함수 호출이 가장 깊을 때부터 출력하는 문제임. 이렇게 하려면 출력하는 코드를 재귀 함수 호출 뒤에 숨겨두면 됨.

 

이러면 예를 들어

D(5) => D(16) => D(8) => D(4) => D(2) => D(1)까지 출력 한 후,

D(1) 지나면서 1 출력

D(2) 지나면서 2 출력

D(4) 지나면서 4 출력

D(8) 지나면서 8 출력

...과 같은 형태로 출력될 것이기 때문임.

 

그래서 출력하는 부분을 재귀 함수 내에서 가장 아래 부분에 배치하면 완료됨.

소스코드

#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;

int n;

void D(int x)
{
	if (x==1){
	}
	else
	{
		if (x%2==0)
		{
			D(x/2);
		}
		else
		{
			D(3*x+1);
		}
	}
	cout<<x<<endl;
}

int main()
{	
	cin>>n;
	D(n);
	return 0;	
}

댓글