관리 메뉴

hye-_

53강 ~ 57강 | 재귀함수 본문

언어/C언어_기초

53강 ~ 57강 | 재귀함수

hyehh 2024. 2. 28. 08:24
728x90
반응형
SMALL
728x90
반응형
SMALL

53강 | 재귀함수 (1) 

자료 출처 - 깨알 C언어 | 53. 재귀함수 (1) (youtube.com)


재귀함수

함수 내에서 자기의 함수를 다시 호출하는 함수

스택 내에 차곡차곡 쌓아두었다가 일괄로 처리를 한다.


 

main()

i=

 

5; for 5>=0 참   if 5%2==1 참 printf funuc(5) : func(i) 함수호출      출력 func(5) : 120

                                                                        num=5

                                                                        if(5==1) 거짓 else return 5 * func(num-1); 함수호출 = 5 * 24 = 120

                                                                                                                             num=4

                                                                                                                              if(4==1) 거짓 else return 4 * func(num-1);

함수호출= 4 * 6 = 24

num=3

if(3==1) 거짓 else return 3 * func(num-1); 함수호출 =3 * 2 = 6

                                                     num=2

                                                      if(2==1) 거짓 else return 2 * func(num-1); 함수호출 = 2 * 1 = 2

                                                                                                     num=1

                                                                                                     if(1==1) 참 return 1         

 

4; for 4>=0 참   if 4%2==1 거짓 

3; for 3>=0 참   if 3%2==1 참 prinft func(3) : func(i) 함수호출     출력 func(3) : 6

                                                                      num=3

                                                                      if(3==1) 거짓 else return 3 * func(num-1) 함수호출 = 3 * 2 = 6

                                                                                                                           num=2

                                                                                                                           if(2==1) 거짓 else return 2 * func(num-1);

함수호출 = 2 * 1 = 2

num=1

if(1==1) 참 return 1  

 

2; for 2>=0 참   if 2%2==1 거짓

1; for 1>=0 참   if 1%2==1 참 printf func(1) : func(i) 함수호출    출력 func(1) : 1 

                                                                       num=1

                                                                       if(1==1) 참 return 1   

0; for 0>=0 참   if 0%2==1 거짓

-1; for -1>=0 거짓  

 

func(1) : 1



54강 | 재귀함수 (2) 

자료 출처 - 깨알 C언어 | 54. 재귀함수 (2) (youtube.com)


 

 

main() 

result=f(123); 함수호출   출력 6

           n=123                                         정수 나누기 정수는 정수 

           if (123>0) 참 return 123 % 10 + f(123/10); 함수호출 =3+3

                                                                 n=12

                                                                 if (12>0) 참 return 12 % 10 + f(12/10); 함수호출 =2+1

                                                                                                                  n=1

                                                                                                                   if (1>0) 참 return 1 % 10 + f(1/10); 함수호출=1+0

                                                                                                                                                                n=0

                                                                                                                                                                if (0>0) 거짓 else return 0; 

 

출력

6


       


55강 | 재귀함수 (3) 

자료 출처 - 깨알 C언어 | 55. 재귀함수 (3) (youtube.com)              


'

main()

result=func(19); 함수호출 =90

           n=19

           if (19%2==1) 참 n=19-1     if (18==0) 거짓      return (func(18-2)+18) 함수호출 = 72+18

                                                                                               n=16

                                                                                               if (16%2==1) 거짓   if (16==0) 거짓 return (func(16-2)+16)

함수호출 =56+16

n=14

if (14%2==1) 거짓   if (14==0) 거짓  return (func(14-2)+14) 함수호출 =42+14

                                                                     n=12

                                                                     if (12%2==1) 거짓   if (12==0) 거짓  return (func(12-2)+12) 함수호출 =30+12

                                                                                                                                          n=10

                                                                                                                                          if(10%2==1)거짓 if (10==0) 거짓

return (func(10-2)+10) 함수호출 =20+10

            n=8

            if (8%2==1) 거짓 if(8==0) 거짓 return (func(8-2)+8 함수호출 =12+8

                                                                          n=6

                                                                          if (6%2==1) 거짓 if(6==0) 거짓 return (func(6-2)+6) 함수호출 =6+6

                                                                                                                                       n=4

                                                                                                                                       if (4%2==1) 거짓 if((4==0) 거짓

return (func(4-2)+4) 함수호출 =2+4

            n=2

            if (2%2==1) 거짓 if (2==0) 거짓 return (func(2-2)+2) 함수호출 =0+2

                                                                          n=0

                                                                          if (0%2==1) 거짓 if (0==0) 참 return 0 

 

출력

result=90



56강 | 재귀함수 (4) 

자료 출처 - 깨알 C언어 | 56. 재귀함수 (4) (youtube.com)


 

main()

my(5,14); 함수호출

    i=5, j=14

    if (5<3) 거짓 else i=5-1,  j=14-4  printf 4, 10  return my(4,10); 함수호출

                                                                                         i=4, j=10

                                                                                         if (4<3) 거짓 else i=4-1, j=10-3 printf 3, 7 return my(3,7); 함수호출

i=3, j=7

if (3<3) 거짓 else i=3-1, j=7-2 printf 2,5 return my(2,5); 함수호출

                                                                          i=2, j=5

                                                                          if (2<3) 참 i=j=1;

출력

4, 10, 3, 7, 2, 5 



57강 | 재귀함수 (5) 

자료 출처 - 깨알 C언어 | 57. 재귀함수 (5) (youtube.com)


 

main()

n=recursion(16); 함수호출 = 34

    n=16

    if (16<5) 거짓 else if (16%5==1) 참 return 16 + recursion(16-1); 함수호출 = 16+18

                                                                               n=15

                                                                               if (15<5) 거짓 else if (15%5==1) 거짓 else recursion(15-1); 함수호출=18

                                                                                                                                                   n=14

                                                                                                                                                   if (14<5) 거짓 else if (14%5==1) 거짓 else recursion(14-1); 함수호출 = 18

                                   n=13

                                   if (13<5) 거짓 else if (13%5==1) 거짓 else recursion(13-1); 함수호출 = 18

                                                                                                       n=12

                                                                                                       if (12<5) 거짓 else if (12%5==1) 거짓 else recursion(12-1); 함수호출 = 18

n=11 

if (11<5) 거짓 else if (11%5==1) 참 return 11+recursion(11-1); 함수호출 = 11+7

                                                                        n=10

                                                                        if (10<5) 거짓 else if (10%5==1) 거짓 else recursion(10-1); 함수호출 =7

                                                                                                                                            n=9

                                                                                                                                            if (9<5) 거짓 else if (9%5==1) 거짓 else recursion(9-1) 함수호출

            n=8

            if (8<5) 거짓 else if (8%5==1) 거짓 else recursion(8-1); 함수호출 =7

                                                                            n=7

                                                                            if (7<5) 거짓 else if (7%5==1) 거짓 else recursion(7-1); 함수호출 =7

                                                                                                                                            n=6

                                                                                                                                            if (6<5) 거짓 else if (6%5==1) 참

return 6+recursion(6-1); 함수호출 =6+1

               n=5

               if (5<5) 거짓 else if (5%5==1) 거짓 else recursion(5-1); 함수호출 =1

                                                                               n=4

                                                                               if (4<5) 참 return 1 

 

출력

34


 

728x90
반응형
LIST

'언어 > C언어_기초' 카테고리의 다른 글

c언어 printf 출력순서  (0) 2024.02.28
58강 ~ 60강 | 중복 재귀함수  (0) 2024.02.28
52강 | STATIC 변수 (4)  (0) 2024.02.27
51강 | STATIC 변수 (3)  (0) 2024.02.27
50강 | STATIC 변수 (2)  (0) 2024.02.27