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);
	}
}