재귀적인 패턴을 재귀함수로 찍는 문제
먼저, 좌표(i, j)에 따른 규칙을 알아보자
N=9 일때
빈칸 :
(1,1) (1,4) (1,7) -> i%3==1 && j%3==1
(3,3) (3,4) (3,5) -> /3 -> 모두 (1,1) -> i%3==1 && j%3==1
(4,3) (4,4) (4,5) -> /3 -> 모두 (1,1) -> i%3==1 && j%3==1
(5,3) (5,4) (5,5) -> /3 -> 모두 (1,1) -> i%3==1 && j%3==1
(7,1) (7,4) (7,7) -> i%3==1 && j%3==1
#include <iostream>
using namespace std;
void print(int i, int j, int n)
{
if ((i / n) % 3 == 1 && (j / n) % 3 == 1) // 빈칸 조건
{
cout << " ";
}
else // 빈칸 조건 아닐 때
{
if (n == 1)
{
cout << "*";
}
else
{
print(i, j, n / 3);
}
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N;
cin >> N;
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
print(i, j, N);
}
cout << '\n';
}
return 0;
}
참고로
N/3의 패턴으로 둘러쌓이게 하기 위해 n==1 일때만 *을 찍어줘야한다.