문제풀이
이전 문제와 다르게 재귀 함수 호출이 가장 깊을 때부터 출력하는 문제임. 이렇게 하려면 출력하는 코드를 재귀 함수 호출 뒤에 숨겨두면 됨.
이러면 예를 들어
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;
}
'C C++ > C C++ 알고리즘 문제 기타' 카테고리의 다른 글
[C/C++] DFS 61. 특정 수 만들기(DFS : MS 인터뷰) (1) | 2022.10.22 |
---|---|
[C/C++] DFS 60. 합이 같은 부분집합(DFS : 아마존 인터뷰) (0) | 2022.10.20 |
[C/C++] 코드업 1928 : (재귀함수) 우박수 (3n+1) (basic) (0) | 2022.10.09 |
[C/C++] 코드업 1920 : (재귀함수) 2진수 변환 (0) | 2022.10.08 |
[C/C++] 코드업 1805 : 입체기동장치 생산공장 (1) | 2022.10.08 |
댓글