2011-06-12 5 views
1

오늘 시험에 응시했고 정확한 코드를 기억하지 못하는 질문이있었습니다.Java 초급 질문 : 메서드를 내부에서 호출 할 수 있습니까?

그러나 나는 그 안에 method exampleMethod(int num) 내부에 메서드 자체를 호출하는 줄이 있다는 것을 기억합니다.

내가 알고 싶은 방법은 내부에서 호출 할 수 있습니까? 객관식 질문 이었기 때문에 우리는 결과를 찾기를 원했습니다.

제 질문에 대한 답변을 드리겠습니다.

감사합니다.

+3

왜 당신이 자신을 그것을 밖으로 시도 할 수있는 작은 프로그램을 작성하지 않습니다? 실험은 배우는 가장 좋은 방법입니다. – Jesper

답변

14

물론 가능합니다. 그렇게하면 이라는 재귀라고합니다. 종료 조건이 있거나 스택 오버 플로우가 발생합니다. 예를 들어

int iAmRecursive(int num) { 
    if (num > 10) // break out at some condition; i.e. don't recurse 
     return num; // return so the recursion doesn't continue 

    iAmRecursive(num + 1); // I didn't break out, so continue to recurse. 
} 

편집 - 여기 같은 예이지만 다른 브레이크 아웃과 함께,

int iAmRecursive(int num) { 
    if (num <= 10) // only continue under certain condition 
     iAmRecursive(num + 1); 

    // When I get here, I implicitly break out by not recursing. 
} 

그러나 나는 항상로 명시하는 것을 선호 테드의 코멘트 @ 칭찬 가능하다면 첫 번째 예에서와 같이 명시 적으로 설명 할 것입니다.

+0

흠 ... 코드 안에 종료 조건이 없습니다. 나는 그 질문을 기억하기 위해 열심히 노력하고있다 : S –

+3

+1 "stack overflow"(정답뿐만 아니라) 사용. –

+2

@ted, 예, 저항 할 수 없었습니다.) – hvgotcodes

1

재귀의 좋은 예는 계승을 계산하는 방법입니다.

public static long factorial(int i) 
{ 
    if (i == 1) return 1; 
    return factorial(i - 1) * i; 
} 

그리고 단순히 이런 식으로 호출 :

long f = factorial(10); // equals 10! = 10 * 9 * 8 * 7 * 6 * 5 * 4 * 3 * 2 (* 1) 
+2

"교수"? 대부분의 사람들은 이것을 "계승"으로 알고 있습니다. –

+0

나는 호기심이 많았다 : [교수 찾기] (http://jeff560.tripod.com/f.html). – Atreys

+0

죄송합니다. 미안, 나는 네덜란드 사람이야. 그것은 "교수"는 나에게 좋은 것처럼 들린다. 그것을 알아 줘서 고마워. –