위에 결과는 1,0,1,0 (출력을 bi(d) 아래에 놓은 경우고
아래 결과는 0.1,0,1 (출력을 bi(d) 위에 놓은 경우인데
내가 아래는 이해가 되거든?
근데 위에는 이해가 안 됨.
위에처럼 출력 위에 bi(d)를 두면 무한으로 계속 숫자만 줄어들고 출력까지 못 가는 거 아님?
예를 들면 bi(d)를 하면 다시 위로 올라가고(d>0)인 한... 다시 숫자가 줄어든 상태로 또 bi(d)로 가고, 다시 올라가고...등등... 아님??
위에는 왜 되는 거임??
역순 출력????? 위 경우는 메소드 호출이 출력 위에 있어서 결국 출력까지 안 가는 거 아님?/
ㅇㅇ
왜 맨 마지막으로 호출된 재귀함수부터 처음으로 호출된 함수까지의 순서를 출력할 수 있는 건지 이해가 안 됨.ㅠㅠ d/=2 다음에 bi(d)까지 가면 다시 public static int bi(int d)로 돌아가고, 또 다시 숫자가 바뀌면서 bi(d)까지 내려오고, 또 다시 public static int b(int d)까지 올라가고...계속 하다가 결국엔 d=0이 되어서 if(참)이 아니기 때문에 System.out.println(b)에 도달하지 못하는 거 아님?
위에서 bi(d) 다음에 System.out.println(b)는 언제 출력이 되는 거임? 나는 bi(d)에 계속 걸려서 System.out.println(b)까지 도달하지 못할 거라고 생각했는데... 그래서 if(참)이든 아니든 System.out.println(b)는 절대로 수행될 수 없다고 생각했는데.....;
잠시 써 봄 ㄱㄷㄱㄷ
아 역순으로 호출한다는 건 이해가 됨... ㄳㄳㄳㄳㄳ 근데 d=0이 되어서 역순으로 호출한다는 말 맞지 않음??? 근데 d=0이 되면 애초에 if문의 조건에 어긋나므로 if문 안에 있는 것들을 쓸 수 없는 거 아님?? System.out.println(b)랑 System.out.println(e+"번째 호출")이거 다 if(참) 문에 속해있는 거 아님??
아.....돌대가리 문돌이라 죄송합니다.ㅠㅠ
근데 어떻게 ?? System.out.println(b)랑 System.out.println(e+"번째 호출") 이 두개를 호출할 수 있는 거임?
마지막이 0이 되면 if문에 걸려서 안 돌아가므로 바로 아래있는 System.out.println(b)가 출력이 된다는 말씀이십니까? 그럼 System.out.pritln(b)가 출력이 되는데, d=0일 때 b=1이므로, System.out.println(1) 이거 하나만 출력 되고 끝 아닌가요.ㅠㅠ 왜 d가 1인 경우까지 계속해서 역순으로 올라가는지 이해가 안 됩니다.ㅠㅠ
아......... 이거 스택 개념임?????????????? 스택은 안배워서 몰랐네.....
출력까지 왜안가냐, 언젠가 if 문에서 필터링되서 return이 될테고, 리턴되는 순간 우루루루~ 출력문에 도달하겠지
void라서 리턴 값이 없는 거 아님??? 리턴 값이 없다는 건 리턴을 안 시키겠다는 거 아님?
this_returns_void(); printf("this_returns_void() 함수 호출이 RETURN되면 이 출력문이 출력되겠지?");
...
Recursive 한 패턴이 원래 좀 처음엔 어려운데, 한번만 이해하고 나면 그담부턴 절대 헷갈리지 않는다. 디버거를 붙여서 한 1시간 정도 뚫어지게 보면서 생각해보면 될듯.