CS Study/C
5. function - recursive
Ryannn
2022. 4. 6. 13:45
1. 최대공약수 구하기
#include <stdio.h>
int gcd(int x, int y);
int main(void) {
int a, b;
int c=0, d=0;
printf("Enter two positive integers : ");
scanf_s("%d %d", &a, &b);
while (1) {
if (a > 0 && b > 0) {
break;
}
else {
printf("Enter two positive integers : ");
scanf_s("%d %d", &a, &b);
}
}
printf("%d", gcd(a, b));
}
int gcd(int x, int y) {
int z;
if (x >= y) {
if (x%y == 0) {
return y;
}
else if (x%y != 0) {
y = x % y;
return gcd(x, y);
}
}
}
2. nCr 구하기
#include <stdio.h>
long int com(int n, int r);
long long fac(int a);
int main(void) {
int n, r;
int i;
printf("Enter n and r : ");
scanf_s("%d%d", &n, &r);
while (1) {
if (5 <= n, r <= 20 && n >= r) {
break;
}
else {
printf("Try again!");
printf("Enter n and r : ");
scanf_s("%d%d", &n, &r);
}
}
printf("%d\n", com(n, r));
}
long long fac(int num) {
if (num <= 1) {
return 1;
}
else {
return(num*fac(num - 1));
}
}
long int com(int n, int r) {
return fac(n) / fac(n-r)/fac(r);
}
3. 6자리 수를 알파벳으로 변환
#include <stdio.h>
int main(void) {
int n;
int a, b, c;
printf("Enter a 6-digit number : ");
scanf_s("%d", &n);
while (1) {
if (100000 <= n && n <= 999999) {
break;
}
else {
printf("INPUT ERROR\n");
printf("Enter a 6-digit number : ");
scanf_s("%d", &n);
}
}
a = (n / 10000) % 26;
b = (n - a * 10000) / 100 % 26;
c = (n - a * 10000 - b * 100) % 26;
printf("%c%c%c", a + 64, b + 64, c + 64);
}
4. 하노이 탑 구현하기
#include <stdio.h>
#include <string.h>
void hanoi(int start, int temp, int end, int c);
int count = 0;
int main(void)
{
int num;
printf("Enter the number of Hanoi disk : ");
scanf_s("%d", &num);
hanoi(1, 2, 3, num);
}
void hanoi(int start, int temp, int end, int n)
{
if (n == 1) {
count++;
printf("%d : %d -> %d\n", count, start, end);
}
else {
hanoi(start, end, temp, n - 1);
count++;
printf("%d : %d -> %d\n", count, start, end);
hanoi(temp, start, end, n - 1);
}
}