72를 두고 생각해보자. 일단 2로 나누고, 안될때까지 2로 나눈다 계속. 안되면 1증가, 안되면 1증가...
반복문을 사용해보자. 근데 2로 나눈것까지는 좋은데 다시 2로 나누어야 한다. 고민을 좀 해봤는데 재귀를 사용하기로 했다.
72를 2로 나누고, 72 / 2값을 다시 올린다. 또 반복문이 새로 돌아가는데 다시 2로 나누어진다.. 결국 9가 되고, if에 안걸린채로 i가 1 증가해서 3으로 나누어진다.
출력을 하면서 진행했고, 재귀가 끝나면 바로 리턴으로 종료시켰다. 다른사람들은 어떻게 풀었는지 궁금하다.
#include <stdio.h>
int res(int n)
{
int i;
i = 2;
while (n > 1)
{
if (n % i == 0)
{
printf("%d\n", i);
res(n / i);
return 0;
}
i++;
}
}
int main()
{
int n;
scanf("%d", &n);
res(n);
}
#include <stdio.h>
int main()
{
int n, i, j;
scanf("%d", &n);
for (i = 2; i <= n; i++)
{
while (n % i == 0)
{
printf("%d\n", i);
n = n / i;
}
}
}
반복문들 두개 돌린다. while문에서 조건을 저렇게 설정해놓으니 n % i가 계속돌아간다..
i++를 생각없이 사용했었는데, 저 코드처럼 굳이 ++안하고 if문마냥 사용하는걸 기억하자.