본문 바로가기

알고리즘

[알고리즘] 재귀(2) - 예제

[문제1] 양의 정수 n을 입력 받아, 1부터 n까지의 합을 구하는 프로그램

#include<stdio.h>


int sum(int n){

if (n == 1){

return 1;

}

else{

return n + sum(n - 1);

}

}


void main(){

int n;

scanf("%d", &n);

printf("%d\n", sum(n));

}


[문제2] 양의 정수를 입력 받아, 각 자리의 수를 높은 자릿수부터 출력하는 프로그램

#include<stdio.h>


void mod(int n){

if (n >= 10){

mod(n / 10);

printf("%d\n", n % 10);

}

else{

printf("%d\n", n);

}

}


void main(){

int n;

scanf("%d", &n);

mod(n);

}


[문제3] 양의 정수를 입력 받아, 각 자리의 수를 낮은 자릿수부터 출력하는 프로그램

#include<stdio.h>


void mod(int n){

if (n >= 10){

printf("%d\n", n % 10);

mod(n / 10);

}

else{

printf("%d\n", n);

}

}


void main(){

int n;

scanf("%d", &n);

mod(n);

}


[문제4] n개의 정수를 입력 받아 최댓값을 구하는 프로그램(n <= 20)

#include<stdio.h>


int Max(int *arr, int n){

if (n == 1){

return *arr;

}

else{

if (*(arr + n - 1) > Max(arr, n - 1)){

return *(arr + n - 1);

}

else{

return Max(arr, n - 1);

}

}

}


void main(){

int n, arr[20] = { 0 };

scanf("%d", &n);

for (int i = 0; i < n; i++){

scanf("%d", &arr[i]);

}

printf("%d\n", Max(arr, n));

}


[문제5] 원반의 개수 n을 입력받아, 하노이 탑 문제를 푸는 프로그램

#include<stdio.h>


void hanoi(int n, char A, char B, char C){

if (n > 1){

hanoi(n - 1, A, C, B);

printf("%c %c\n", A, C);

hanoi(n - 1, B, A, C);

}

else{

printf("%c %c\n", A, C);

}

}


void main(){

int n;

scanf("%d", &n);

hanoi(n, 'A', 'B', 'C');

}


[문제6] 두 개의 양의 정수를 입력받아, 이 두 정수의 최대공약수를 유클리드 호제법으로 출력하는 프로그램

#include<stdio.h>


int gcd(int n1, int n2){

if (n1 < n2) {

if (n1 == 0) {

return n2;

}

else {

return gcd(n1, (n2 % n1));

}

}

else if (n1 > n2){

if (n2 == 0){

return n1;

}

else{

return gcd(n2, (n1 % n2));

}

}

else {

return n1;

}

}


void main(){

int n1, n2;

scanf("%d", &n1);

scanf("%d", &n2);

printf("%d\n", gcd(n1, n2));

}


[문제7] 공백 없는 영어 문자열 하나를 입력받아, 특정 문자가 몇 번 나타나는지 검사하는 프로그램

#include<stdio.h>

#include<string.h>


int Check(char *str, int len, char char1){

if (len != 0){

if (*(str + strlen(str) - 1 - len) == char1) {

return 1 + Check(str, len - 1, char1);

}

else {

return 0 + Check(str, len - 1, char1);

}

}

else{

if (*(str + strlen(str) - 1) == char1) {

return 1;

}

else {

return 0;

}

}

}


void main(){

char str[100];

char char1;

gets(str);

char1 = getchar();

printf("%d\n", Check(str, strlen(str) - 1, char1));

}