0x0B-재귀. 재귀에서 비트쉬프트 연산자를 활용해서 2의 거듭제곱을 나타내는 부분.
#include <bits/stdc++.h>
using namespace std;

void func(int a, int b, int n) {
	if (n == 1) {
		cout << a << ' ' << b << '\n';
		return;
	}
	func(a, 6 - a - b, n - 1);
	cout << a << ' ' << b << '\n';
	func(6 - a - b, b, n - 1);
}

int main(void) {
	ios::sync_with_stdio(0);
	cin.tie(0);
	int k;
	cin >> k;
	cout << (1 << k) - 1 << '\n';
	func(1, 3, k);
}

하노이탑 최소 이동 횟수의 경우 a(1)=1, a(n)=2a(n-1)+1이고, 이걸 일반항으로 나타내면 a(n)=2^n-1인데, 

그래서 그 최소이동 횟수를 출력하는 부분에서 

cout<<(1<<k)-1<<'\n'; 으로 이루어져 있는데, 여기서 

(1<<k)은 비트쉬프트 연산자를 나타내는 부분이고, 이 부분은 1*2^k와 같은 값을 나타낸다. 

그리고 이 부분은 #include <bitset>을 통해서 bitset헤더를 사용해서 사용하게 만든 부분이고, 

이렇게 식을 작성함으로 해서 더 빠르고 간결하게 2의 거듭제곱을 나타낼 수 있다. 

이와 관련된 비트연산자에 대해서는 참고가 될만한 블로그 글을 첨부한다. 나중에 시간나면 다시 한번 읽어보도록 하자. 

비트플래그와 비트마스크 또한 게임개발을 하는데 요긴하게 사용할 수 있는 부분이니까, 공부를 잘 해보도록 하자. 

https://ansohxxn.github.io/cpp/chapter3-3/

  Comments,     Trackbacks