코딩/C언어

_21_문제 => 문제028_재귀함수 ~ 문제028_재귀함수11_01

tree0505 2025. 7. 17. 12:11
반응형
    • _21_문제

  • 문제028_재귀함수.cpp
    • 재귀함수 
      • for문을 거꾸로 돌린것 
      • 함수로 반복문을 표현한것 
      • 함수호출을 가지고 반복문처럼 만든것 
#include <stdio.h>
#include <stdlib.h>

int r1(){
	return 4;
} 

int r10(){
	return (30 +r1());
}

int r100(){
	return (200 + r10());
}

int main(void) {
	printf("%d \n", r100()); //234  
	return 0;
}


  • 문제028_재귀함수02.cpp
#include <stdio.h>
#include <stdlib.h>

int r1(){
	return 4;
} 

int r10(){
	int n1 = 30;
	int n2 = r1();
	return n1 + n2;
}

int r100(){
	int n1 = 200;
	int n2 = r10();
	return n1 + n2;
}

int main(void) {
	int n = r100();
	printf("%d \n", n);   
	return 0;
}


 

  • 문제028_재귀함수04_01.cpp
#include <stdio.h>

int func(int num){
	if(num == 1)
		return 1;
	else
		return num * func(num - 1);
}

int main(void) {

	int i;
	//5 4 3 2 1 0 // 5 3 1 
	for (i = 5; i >= 0; i--){
		if(i % 2 == 1) //5 3 1 
			printf("%d %d\n", i , func(i)); // 5, 120 // 3 , 6 // 1 , 1 
	}

	return 0;
}


  • 문제028_재귀함수04_02.cpp
#include <stdio.h>

int func(int num){
	if(num == 1)
		return 1;
	else{
		int a = func(num - 1);
		int result = a * num;
		return result;
	}
}

int main(void) {

	int i;
	for (i = 5; i >= 0; i--){
		if(i % 2 == 1)
			printf("%d %d\n", i , func(i));
	}

	return 0;
}

  • 문제028_재귀함수04_04.cpp
#include <stdio.h>

int main(void) {

	int i;
	int j;
	int sum;
	sum = 1;
	j = 5;
	while(1){
		sum *= j; // 1 * 5 * 4 * 3 * 2 * 1 
		if(j == 1){
			break;
		}
		j -= 1;
	}
	printf("%d\n" , sum);

	return 0;
}

  • 문제028_재귀함수04_05.cpp
#include <stdio.h>

int main(void) {

	int i;
	int j;
	int sum;
	for (i = 5; i >= 0; i--){
		if(i % 2 == 1){ // 5 3 1 
			sum = 1;
			j = i;
			while(1){
				sum *= j;
				if(j == 1){
					break;
				}
				j -= 1;
			}
			printf("%d\n" , sum);
		}		
	}
	return 0;
}

  • 문제028_재귀함수05_01.cpp
#include <stdio.h>


int f(int n){
    if(n > 0)
        return n % 10 + f(n / 10);
    else
        return 0;
}

int main(void) {
	int result;
    result = f(123);
    printf("%d\n" , result);
	return 0;
}


  • 문제028_재귀함수05_03.cpp
#include <stdio.h>

int main(void) {
    int n  = 123;
    int result = 0;
    while(true){
		if(n > 0){
			result += n % 10;
			n = n / 10;
		}else{
			break;
		}	
	}
    printf("%d\n" , result);
	return 0;
}

  • 문제028_재귀함수06_01.cpp
#include <stdio.h>

int func(int n){
    if(n % 2 == 1)
        n = n - 1;
    if (n == 0)
        return 0;
    return (func(n-2)+n);
}

int main(void) {
    int result;
    result = func(19);
    printf("%d\n" , result);
	return 0;
}


  • 문제028_재귀함수07_01.cpp
#include <stdio.h>

int func(int i, int j){
    if(i < 3) i = j = 1;
    else{
        i = i-1;
        j = j-1;
        printf("%d %d" , i, j);
        return func(i, j);
    }
}

int main(void) {
    func(5, 14);
    
	return 0;
}


  • 문제028_재귀함수08_01.cpp
#include <stdio.h>

int recursion(int n){
	if(n < 5) return 1;
	else if(n % 5 == 1)
		return n + recursion(n-1); // 1 6 11 16
	else recursion(n-1);
}

int main(void) {

    int n = recursion(16);
    printf("%d\n" , n);
	return 0;
}


  • 문제028_재귀함수09_01.cpp
#include <stdio.h>

int funa(int n){
	if(n > 1)
        return (n + funa(n - 2));
    else
        return (n % 2);
}

int main(void) {
    // 9 12 
    printf("%d %d\n" , funa(5) , funa(6));
	return 0;
}


  • 문제028_재귀함수10_01.cpp
#include <stdio.h>

int funa(int n){
	printf("%d" ,  n);
    if(n > 1)
        funa(n - 1);
    printf("%d\n" , n);  // 3 2 1 1 2 3 
}

int main(void) {
    funa(3);
	return 0;
}


  • 문제028_재귀함수11_01.cpp
#include <stdio.h>

int fun(int a, int b, int c){
	if(c != 0){
        fun(b, a + b, c-1);
        printf("%d %d %d\n" , a, b, c);
        //2 3 1 
        //1 2 2 
        //1 1 3 
    }
}

int main(void) {
    int i = 1;
    int j = 1;
    int k = 3;
    fun(i, j, k);
	return 0;
}

  •  
반응형