재귀는 해당 코드가 끝나야 다음 코드로 넘어간다.
아래 코드에서 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
이런식으로 출력값을 만들어라. 단, 반복문은 사용해선 안되고 재귀만 사용하라.
함수를 두 부분으로 나누어야 한다.
어떤 값을 주었을 때, 재귀로 1234...n 을 붙여서 출력하는 함수
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);
}
}