재귀 관련 idea

ims·2021년 5월 27일
0

NEW 알고리즘

목록 보기
10/14
post-thumbnail

📌 생각

재귀는 해당 코드가 끝나야 다음 코드로 넘어간다.

아래 코드에서 hello(stack) 코드가 끝난 뒤 bye(i) 가 실행됨을 볼 수 있다.

call stack이 쌓이고, 종료조건부터 돌아온다고 생각하면 좋을 것 같다.

📌 코드

import java.util.Stack;

public class ScratchPad {
    public static void main(String[] args) {

        Stack<Integer> stack = new Stack<>();
        stack.push(1);
        stack.push(2);
        stack.push(3);
        stack.push(4);

        hello(stack);
    }

    static void hello(Stack<Integer> stack){

        if (stack.isEmpty()) return;

        Integer i = stack.pop();
        System.out.println("hello " + i);
        hello(stack);
        bye(i);
    }

    static void bye(Integer i){
        System.out.println("Bye" + i);
    }
}

📌 그림설명

📌 재귀 출력

🔥 문제

n= 6이라면

123456
12345
1234
123
12
1

이런식으로 출력값을 만들어라. 단, 반복문은 사용해선 안되고 재귀만 사용하라.

🔥 아이디어

함수를 두 부분으로 나누어야 한다.

  1. 어떤 값을 주었을 때, 재귀로 1234...n 을 붙여서 출력하는 함수

  2. 1번의 함수를 n-1 하면서 출력하는 함수

🔥 코드

public class ScratchPad {
    public static void main(String[] args) {
        recursiveResult(15);
    }
    public static String recursiveString(int n){
        if (n==1) return "1";
        else return recursiveString(n-1)+n;
    }
    public static void recursiveResult(int n){
        if(n==0) return ;

        System.out.println(recursiveString(n));
        recursiveResult(n-1);
    }
}
profile
티스토리로 이사했습니다! https://imsfromseoul.tistory.com/ + https://camel-man-ims.tistory.com/

0개의 댓글