gwooden_코린이

java_재귀호출_221125(5일차) 본문

java/5일차

java_재귀호출_221125(5일차)

gwooden22 2022. 11. 25. 12:30
728x90

package 재귀호출;

 

public class Main {

 

        public static void main(String[] args) {

              

               Rec rec = new Rec();

              

               int result;

              

               result  = rec.rescursive_func(5);

              

               System.out.println("결과 : " + result);

 

        }

 

}

※결과값

결과 : 15

 

package 재귀호출;

 

public class Rec {

       

        //1부터 x까지 합계를 구하는 매서드

       

        public int rescursive_func(int num) { //num -> 5

              

               if(num == 1)

                       return 1;

              

 

               메서드는 항상 먼저 처리가 되어야지 그 다음을 처리할 수 있다.

                위에서 시작해서 만 아래 리턴까지 갔다 다시 위로 올라가는 방식으로 누적되서 처음 리턴이 완료되면 최종적으                  로 호출

 

               return num + rescursive_func(num - 1); // 자신을 호출해서 사용

               // return 5 + rescursive_func(5 - 1);

               //     return 4 + rescursive_func(4 - 1);

               //             return 3 + rescursive_func(3 - 1);

               //                     return 2 + rescursive_func(2 - 1);

               //                            return 1;

              

        }

 

}

 

 


호출이 먼저 되고 리턴이 마지막에

 

rec.rescursive_func(5);

 

0.

public int rescursive_func(int 5) { //num -> 5일 때

if(num == 1)
return 1;

return 5 + rescursive_func(5 - 1)
                 rescursive_func(5 - 1)
return 5 + 4 + 3 + 2 + 1

1.

public int rescursive_func(int 4) { 

if(num == 1)
return 1;

return 4 + rescursive_func(4 - 1)
                 rescursive_func(4 - 1)
return 4 + 3 + 2 + 1

2.

public int rescursive_func(int 3) { 

if(num == 1)
return 1;

return 3 + rescursive_func(3 - 1)
                 rescursive_func(3 - 1)
return 3 + 2 + 1

3.

public int rescursive_func(int 2) { 

if(num == 1)    
return 1;            


return 2 + rescursive_func(2 - 1)
                 rescursive_func(2 - 1)
return 2 + 1

4.

public int rescursive_func(int 1) { 

if(num == 1)      if(num == 1)
return 1;            return 1;

//int 1이다 보니 if문으로 인해 맨 하단 리턴이 실행 되지 않는다.

return 2 + rescursive_func(2 - 1)
                 rescursive_func(1 - 1)
return 1

 


package 팩토리얼계산;

 

import java.util.Scanner;

 

public class Main {

 

        public static void main(String[] args) {

               //팩토리얼 계산

               //5! -> 5 x 4 x 3 x 2 x 1

               //10! -> 10 x 9 x 8 x ... x 2 x 1

              

               //정수를 입력받아 입력받은 정수의 팩토리얼 값을 출력

               //정수 입력 : 5

               //결과 : 120

              

               Fclac fclac = new Fclac();

              

               Scanner sc = new Scanner(System.in);

              

               int num, mul;

              

               System.out.print("정수를 입력하세요 : ");

               num = sc.nextInt();

              

               mul = fclac.mul(num);

              

               System.out.println(mul);

              

              

 

        }

 

}

 

※결과값

정수를 입력하세요 : 5
5 * 4 * 3 * 2 * 1 = 120


 

package 팩토리얼계산;

 

public class Fclac {

       

        public int mul (int num) {

              

               if(num != 1) //반복하다 num 값이 1 아닐 때는 다음으로 넘어감

                       System.out.print(num +" * "); //반복되면서 나오는 숫자는 리턴 위에 설정하여 실행해야 된다.

              

               if(num == 1) { //넘어가면서 마지막 숫자 뒤에 붙는건 * 조건이 안되고 다음 조건이 되는 = 붙는다

                       System.out.print(num +" = ");

                       return 1;

                       }

              

              

               return num * mul(num - 1);

                      

 

        }

       

       

}

 


 

728x90

'java > 5일차' 카테고리의 다른 글

java_접근제한자_221125(5일차)  (0) 2022.11.25
java_생성자_221125(5일차)  (0) 2022.11.25
java_오버로딩_221125(5일차)  (0) 2022.11.25
java_클래스02_221125(5일차)  (0) 2022.11.25
java_클래스_221125(5일차)  (0) 2022.11.25
Comments